Diese Verwechslung kann einiges zerstören. Sowohl den Programmer als auch den µC.
In deinem Falle ist möglicherweise nur der Teil beschädigt, der mit der Taste 3 beschäftig ist. Vielleicht also nur ein PIN.
Hallo,
hier erstmal mein Programm (auf das Nötigste gekürzt)
Ich benutze den USB-Programmer von Robotik-Hardware, habe diesen aber - wie ich an dieser Stelle leider zugeben muss - aus Versehen kurz an die I2C-Schnittstelle des RN-Boards angeschlossen und versucht, Daten zu übertragen, deswegen der Verdacht des Defekts.Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 ' ============================================================================= ' Variablendeklaration ' ============================================================================= Dim I As Integer 'Zählvariable Dim Servodevice As Byte 'Servoansteuerung Dim Servocommand As Byte Dim Servonummer As Byte Dim Servodata As Byte Dim Greifer As Integer 'Greiferposition Dim Greifergelenk As Integer Dim Mittelgelenk As Integer Dim Hauptgelenk1 As Integer Dim Hauptgelenk2 As Integer ' ============================================================================= ' Konfiguration ' ============================================================================= Config Portb = Input 'Input1 für Taster Config Portc = Output 'Output für LEDs Config Portd = Input 'Input2 für Taster Config Portd.7 = Output 'Output für Sounds Config Scl = Portc.0 'Ports fuer I2C-Bus Config Sda = Portc.1 Config Pina.0 = Output 'Kommunikation Stepper_enable Alias Porta.0 'mit MOTCTRL Config Pina.1 = Output Stepper_richtung Alias Porta.1 Config Pina.2 = Output Stepper_takt Alias Porta.2 ' ============================================================================= ' Statusmeldung "OK" ' ============================================================================= Sound Portd.7 , 400 , 200 Waitms 100 Sound Portd.7 , 400 , 300 Waitms 100 Sound Portd.7 , 400 , 400 Waitms 100 Sound Portd.7 , 400 , 500 Waitms 100 Sound Portd.7 , 400 , 600 Waitms 100 Sound Portd.7 , 400 , 700 Waitms 100 Sound Portd.7 , 400 , 800 Waitms 100 Sound Portd.7 , 900 , 900 Waitms 100 ' ============================================================================= ' Initialisierung ' ============================================================================= Portc.0 = 0 'Alle LEDs an Portc.1 = 0 Portc.2 = 0 Portc.3 = 0 Portc.4 = 0 Portc.5 = 0 Portc.6 = 0 Portc.7 = 0 Portb.0 = 1 'Pullup-Widerstände Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Portb.4 = 1 Portb.5 = 1 Portb.6 = 1 Portb.7 = 1 Portd.0 = 1 Portd.2 = 1 Portd.4 = 1 Portd.6 = 1 Stepper_enable = 0 'Motor aus ' ============================================================================= ' Eigentliches Programm als Endlosschleife ' ============================================================================= Do ' ============================================================================= ' Taster 1 nach links schwenken ' ============================================================================= If Pinb.0 = 1 Then Portc.0 = 0 Else Portc.0 = 1 End If ' ============================================================================= ' Taster 2 nach rechts schwenken ' ============================================================================= If Pinb.2 = 1 Then Portc.1 = 0 Else Portc.1 = 1 End If ' ============================================================================= ' Taster 3 Element 1 heben ' ============================================================================= If Pinb.4 = 1 Then Portc.2 = 0 Else Portc.2 = 1 End If ' ============================================================================= ' Taster 4 Element 1 senken ' ============================================================================= If Pinb.6 = 1 Then Portc.3 = 0 Else Portc.3 = 1 End If ' ============================================================================= ' Taster 5 Greifer öffnen ' ============================================================================= If Pinb.1 = 1 Then Portc.4 = 0 Else Portc.4 = 1 End If ' ============================================================================= ' Taster 6 Greifer schließen ' ============================================================================= If Pinb.3 = 1 Then Portc.5 = 0 Else Portc.5 = 1 End If ' ============================================================================= ' Taster 7 Element 2 heben ' ============================================================================= If Pinb.5 = 1 Then Portc.6 = 0 Else Portc.6 = 1 End If ' ============================================================================= ' Taster 8 Element 2 senken ' ============================================================================= If Pinb.7 = 1 Then Portc.7 = 0 Else Portc.7 = 1 End If ' ============================================================================= ' Taster 9 Greifer heben ' ============================================================================= If Pind.0 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If ' ============================================================================= ' Taster 10 Greifer senken ' ============================================================================= If Pind.2 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If ' ============================================================================= ' Taster 11 UNBELEGT ' ============================================================================= If Pind.4 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If ' ============================================================================= ' Taster 12 UNBELEGT ' ============================================================================= If Pind.6 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If Loop End
Lasse ich dieses Programm nun auf dem Board laufen, "denkt" dieses, Taste 3 wäre durchgehend gedrückt, auch wenn meine Selbstbau-Tastatur garnicht angeschlossen ist. Vorher funktionierte alles, aber vllt habe ich ja doch einen Fehler in der Software.
Seltsam ist auch, dass der Fehler nur bei angeschlossenem Programmer auftaucht, andere (hier nicht gepostete) Teile des Programms funktionieren aber auch dann nicht mehr wie noch vor 2 Tagen.
Was denkt ihr, habe ich den Programmer geschrottet oder liegt's an was anderem?
Thx für eure Hilfe!
Diese Verwechslung kann einiges zerstören. Sowohl den Programmer als auch den µC.
In deinem Falle ist möglicherweise nur der Teil beschädigt, der mit der Taste 3 beschäftig ist. Vielleicht also nur ein PIN.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Einen Defekt des µC kann ich mittlerweile ausschließen. Eine Übertragung der Software auf ein anderes Board bringt den gleichen Fehler mit sich. Es kann also sehr wohl sein, dass der Programmer defekt ist? Kann man das irgendwie nachprüfen?
Hast du mal einen Blick auf den Quelltext geworfen? Da sollte alles in Ordnung sein, oder?
Versuch mit einem Testprogramm, ob du den Pin f. Taste 3 auf 0 und 1 setzen kannst.
Einziges special mit dem Pin ist der SPI. Wenn der aktiviert wäre, schnappt er sich ggf. den PINCode:Config Pinb.4=output DO portb.4 = 0 Waitms 1000 portb.4 = 1 Waitms 1000 LOOP
BTW:
Hat nix damit zu tun, aber hier:
Config Portd.7 = Output
sollte sein:
Config Pind.7 = Output
(ganzes Port -> "Config PortX=" einzelne Pin ->"Config PinX.Y=" )
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Ja, ich kann ihn zwischen 0 und 1 hin und her schalten, funktioniert einwandfrei.
Kann es etwas mit dem, was du da erwähnt hast, zu tun haben? Wenn ich also einen ganzen Port ändern möchte, brauche ich port und ansonsten pin, richtig? Aber wieso schreibst du dann in deinem Quelltext:
?Code:portb.4 = 0
Bascom ist da ein wenig schizoid.
Beim Config gilt:
(ganzes Port -> "Config PortX=" einzelne Pin ->"Config PinX.Y=" )
Bei den Befehlen gilt immer
PINB od PINB.x wenn's um den Input geht,
PORTB od. PORTB.x wenn's um den Output geht.
Du solltest einmal (bei deinem Programm) den Input Pinb.4 messen und schauen, wer sich nun irrt:
Liest der µC ein "1", obwohl der Pin auf 0 Volt steht, bzw.
liest der µC ein "0", obwohl der Pin auf ~5 Volt steht
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Tip von mir: Ich hab die ISP-Buchsen sowie den Stecker vom Programmer rot/weiss angepinselt; die I2C-Buchsen bleiben schwarz;
Hab mir mit so ner Verwechslung auch mal nen Programmer zerschossen...
#ifndef MfG
#define MfG
@ Jaecko:
Gute Idee, werde deinen Rat befolgen
@ PicNick:
Ah, so ist das, in der Tat seltsam.
Der Quelltext sieht nun so aus:
Bei den Bedingungen bin ich mir nicht ganz sicher. Muss es daCode:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 ' ============================================================================= ' Variablendeklaration ' ============================================================================= Dim I As Integer 'Zählvariable Dim Servodevice As Byte 'Servoansteuerung Dim Servocommand As Byte Dim Servonummer As Byte Dim Servodata As Byte Dim Greifer As Integer 'Greiferposition Dim Greifergelenk As Integer Dim Mittelgelenk As Integer Dim Hauptgelenk1 As Integer Dim Hauptgelenk2 As Integer ' ============================================================================= ' Konfiguration ' ============================================================================= Config Portb = Input 'Input1 für Taster Config Portc = Output 'Output für LEDs Config Portd = Input 'Input2 für Taster Config Pind.7 = Output 'Output für Sounds 'Config Scl = Portc.0 'Ports fuer I2C-Bus 'Config Sda = Portc.1 Config Pina.0 = Output 'Kommunikation Stepper_enable Alias Pina.0 'mit MOTCTRL Config Pina.1 = Output Stepper_richtung Alias Pina.1 Config Pina.2 = Output Stepper_takt Alias Pina.2 ' ============================================================================= ' Statusmeldung "OK" ' ============================================================================= Sound Portd.7 , 400 , 200 Waitms 100 Sound Portd.7 , 400 , 300 Waitms 100 Sound Portd.7 , 400 , 400 Waitms 100 Sound Portd.7 , 400 , 500 Waitms 100 Sound Portd.7 , 400 , 600 Waitms 100 Sound Portd.7 , 400 , 700 Waitms 100 Sound Portd.7 , 400 , 800 Waitms 100 Sound Portd.7 , 400 , 900 Waitms 100 ' ============================================================================= ' Initialisierung ' ============================================================================= Portc.0 = 0 'Alle LEDs an Portc.1 = 0 Portc.2 = 0 Portc.3 = 0 Portc.4 = 0 Portc.5 = 0 Portc.6 = 0 Portc.7 = 0 Portb.0 = 1 'Pullup-Widerstände Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Portb.4 = 1 Portb.5 = 1 Portb.6 = 1 Portb.7 = 1 Portd.0 = 1 Portd.2 = 1 Portd.4 = 1 Portd.6 = 1 Stepper_enable = 0 'Motor aus ' ============================================================================= ' Eigentliches Programm als Endlosschleife ' ============================================================================= Do ' ============================================================================= ' Taster 1 nach links schwenken ' ============================================================================= If Pinb.0 = 1 Then Portc.0 = 0 Else Portc.0 = 1 End If ' ============================================================================= ' Taster 2 nach rechts schwenken ' ============================================================================= If Pinb.2 = 1 Then Portc.1 = 0 Else Portc.1 = 1 End If ' ============================================================================= ' Taster 3 Element 1 heben ' ============================================================================= If Pinb.4 = 1 Then Portc.2 = 0 Else Portc.2 = 1 End If ' ============================================================================= ' Taster 4 Element 1 senken ' ============================================================================= If Pinb.6 = 1 Then Portc.3 = 0 Else Portc.3 = 1 End If ' ============================================================================= ' Taster 5 Greifer öffnen ' ============================================================================= If Pinb.1 = 1 Then Portc.4 = 0 Else Portc.4 = 1 End If ' ============================================================================= ' Taster 6 Greifer schließen ' ============================================================================= If Pinb.3 = 1 Then Portc.5 = 0 Else Portc.5 = 1 End If ' ============================================================================= ' Taster 7 Element 2 heben ' ============================================================================= If Pinb.5 = 1 Then Portc.6 = 0 Else Portc.6 = 1 End If ' ============================================================================= ' Taster 8 Element 2 senken ' ============================================================================= If Pinb.7 = 1 Then Portc.7 = 0 Else Portc.7 = 1 End If ' ============================================================================= ' Taster 9 Greifer heben ' ============================================================================= If Pind.0 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If ' ============================================================================= ' Taster 10 Greifer senken ' ============================================================================= If Pind.2 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If ' ============================================================================= ' Taster 11 UNBELEGT ' ============================================================================= If Pind.4 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If ' ============================================================================= ' Taster 12 UNBELEGT ' ============================================================================= If Pind.6 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If Loop End
heißen oder dochCode:If PinX.Y...
?Code:If PortX.Y ...
Das mit dem Messen werde ich morgen nachholen, muss jetzt zur Arbeit.
Genauso isses ok
Code:If Pinb.4 = 1 Then Portc.2 = 0 Else Portc.2 = 1 End If
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Gut, dann wäre das geklärt.
Habe deinen Rat befolgt und das Ganze mal durchgemessen. Bei diesem Programm (wie es auch oben steht)
bleibtCode:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 ' ============================================================================= ' Variablendeklaration ' ============================================================================= Dim I As Integer 'Zählvariable Dim Servodevice As Byte 'Servoansteuerung Dim Servocommand As Byte Dim Servonummer As Byte Dim Servodata As Byte Dim Greifer As Integer 'Greiferposition Dim Greifergelenk As Integer Dim Mittelgelenk As Integer Dim Hauptgelenk1 As Integer Dim Hauptgelenk2 As Integer ' ============================================================================= ' Konfiguration ' ============================================================================= Config Portb = Input 'Input1 für Taster Config Portc = Output 'Output für LEDs Config Portd = Input 'Input2 für Taster Config Pind.7 = Output 'Output für Sounds 'Config Scl = Portc.0 'Ports fuer I2C-Bus 'Config Sda = Portc.1 Config Pina.0 = Output 'Kommunikation Stepper_enable Alias Pina.0 'mit MOTCTRL Config Pina.1 = Output Stepper_richtung Alias Pina.1 Config Pina.2 = Output Stepper_takt Alias Pina.2 ' ============================================================================= ' Statusmeldung "OK" ' ============================================================================= Sound Portd.7 , 400 , 200 Waitms 100 Sound Portd.7 , 400 , 300 Waitms 100 Sound Portd.7 , 400 , 400 Waitms 100 Sound Portd.7 , 400 , 500 Waitms 100 Sound Portd.7 , 400 , 600 Waitms 100 Sound Portd.7 , 400 , 700 Waitms 100 Sound Portd.7 , 400 , 800 Waitms 100 Sound Portd.7 , 600 , 900 Waitms 100 ' ============================================================================= ' Initialisierung ' ============================================================================= Portc.0 = 0 'Alle LEDs an Portc.1 = 0 Portc.2 = 0 Portc.3 = 0 Portc.4 = 0 Portc.5 = 0 Portc.6 = 0 Portc.7 = 0 Portb.0 = 1 'Pullup-Widerstände Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Portb.4 = 1 Portb.5 = 1 Portb.6 = 1 Portb.7 = 1 Portd.0 = 1 Portd.2 = 1 Portd.4 = 1 Portd.6 = 1 Stepper_enable = 0 'Motor aus ' ============================================================================= ' Eigentliches Programm als Endlosschleife ' ============================================================================= Do ' ============================================================================= ' Taster 1 nach links schwenken ' ============================================================================= If Pinb.0 = 1 Then Portc.0 = 0 Else Portc.0 = 1 End If ' ============================================================================= ' Taster 2 nach rechts schwenken ' ============================================================================= If Pinb.2 = 1 Then Portc.1 = 0 Else Portc.1 = 1 End If ' ============================================================================= ' Taster 3 Element 1 heben ' ============================================================================= If Pinb.4 = 1 Then Portc.2 = 0 Else Portc.2 = 1 End If ' ============================================================================= ' Taster 4 Element 1 senken ' ============================================================================= If Pinb.6 = 1 Then Portc.3 = 0 Else Portc.3 = 1 End If ' ============================================================================= ' Taster 5 Greifer öffnen ' ============================================================================= If Pinb.1 = 1 Then Portc.4 = 0 Else Portc.4 = 1 End If ' ============================================================================= ' Taster 6 Greifer schließen ' ============================================================================= If Pinb.3 = 1 Then Portc.5 = 0 Else Portc.5 = 1 End If ' ============================================================================= ' Taster 7 Element 2 heben ' ============================================================================= If Pinb.5 = 1 Then Portc.6 = 0 Else Portc.6 = 1 End If ' ============================================================================= ' Taster 8 Element 2 senken ' ============================================================================= If Pinb.7 = 1 Then Portc.7 = 0 Else Portc.7 = 1 End If ' ============================================================================= ' Taster 9 Greifer heben ' ============================================================================= If Pind.0 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If ' ============================================================================= ' Taster 10 Greifer senken ' ============================================================================= If Pind.2 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If ' ============================================================================= ' Taster 11 UNBELEGT ' ============================================================================= If Pind.4 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If ' ============================================================================= ' Taster 12 UNBELEGT ' ============================================================================= If Pind.6 = 1 Then 'Portc.0 = 0 Else Sound Portd.7 , 400 , 200 End If Loop End
also das Sorgenkind, als einziger Pin Low. Es wird also korrekt eingelesen und die LED ausgeschaltet.Code:PinB.6
Übertrage ich diese Software auf das Board
lässt sich zwar auch Pin 6 toggeln, er springt aber nur auf 2,74V statt, wie Pin 4 und auch alle anderen, auf 5V.Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 Config Portb = Output Do Portb.6 = 0 Portb.4 = 0 Waitms 5000 Portb.6 = 1 Portb.4 = 1 Waitms 5000 Loop
Kannst du dir einen Reim darauf machen?
Lesezeichen