Hallo! Irgendwann muss ich mich mal ranwagen, das serielle EEprom mittels TWI mit den Mega88 zu füttern... Da dies ja nun etwas kompliziert ist, habe ich eine Frage zum debuggen: Kann ich meinen Assembler Code in den Mega88 debuggen? Also Programmiergerät benutze ich ein selbstgebautes, das man an den Parallelport des PC anschließt. Als Entwicklungssoftware benutze ich AVR Studio 4. Habe schon irgendwo, wahrscheinlich hier, gelesen, dass jemand durch das debuggen seinen Mega 88 "kaputt gemacht" hat. Deswegen frage ich lieber erst mal nach ;-)
Wahrscheinlich geht das so wie Du es dir vorstellst mit deinem Programmer nicht. IMHO hat der Mega88 ein Debug-Wire interface. Das läuft dann mit dem AVR-Dragon, ein "freies" DebugWire-Geräte kenne ich nicht. Alternativ kannst Du das ja evetuell auch im Simulator vom AVR Studio debuggen. Dabei wird dann der Mega88 simuliert. Oder du baust Debug-Ausgaben ein, die du typischer Weise über den UART (oder TWI/SPI) ausgibst. Schau mal hier --> http://www.mikrocontroller.net/articles/DebugWIRE
Schade, dass das mit dem debuggen nicht einfach so funktioniert. Aber wie ich gerade merke, würde mir das eh nicht weiterhelfen. Ich habe im Inet einen C-Code gefunden, den ich dann auf Assembler umgestrickt habe (obwohl ich kein C kann... das möchte ich betonen). Hier nun die ersten Zeilen des Codes:
1 | rjmp TWIStart |
2 | |
3 | TWIAction: ;R16 => Das Kommando |
4 | ori r16, (1 << TWINT) |
5 | sts TWCR,r16 |
6 | |
7 | wait1: lds r16,TWCR |
8 | |
9 | Rcall USARTSent ;R16 'debuggen' |
10 | |
11 | sbrs r16,TWINT |
12 | rjmp wait1 |
13 | lds r16, TWSR |
14 | ret |
15 | |
16 | TWIStart: |
17 | |
18 | ldi r16,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN) |
19 | rcall TWIAction |
20 | cpi r16, 0x08 |
21 | brne error |
22 | |
23 | .... |
So: die Code Abarbeitung bleibt in der WAIT1 Schleife hängen. Bin schon enttäuscht, dass gar nicht passiert.... Nun zu der Hauptfrage: "Wieso wird die Bedienung nicht erfüllt", noch 2 Andere: Was bedeutet das :"(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)" und zwar die "<<" und die "|". ist das "|" eine ODER-Verknüpfung? Wollte ich schon immer wissen, hab mich aber noch nie zu fragen gewagt. Dann der Befehl "sbrs r16,TWINT": Prüft ob das Bit "TWINT" im R16 gesetzt ist und führt dann den nächsten Befehl nicht aus? Diesen Befehl hab ich direkt aus dem Datenblatt vom Mega88 genommen. Nur ein Problem damit: TWINT hat den Wert 15? 15 Bits hat das Register doch gar nicht, wenn ich mich nicht verzählt habe...Ach ja der Wert in R16, das geprüft wird, ist 36.
Hätte die Frage wohl nicht mitten in der Nacht stellen sollen? :-)
Hallo Silver! "|" ist eine oder-Verknüpfung. "<<" ist ein Shift-Operator, in diesem fall wird nach links geschoben (">>" entsprechend nach rechts). (1 << TWINT) bedeutet also das Bitmuster "00000001" um TWINT Stellen nach links verschoben wird. wäre TWINT==3 also "00001000". Dies ist eine einfache Möglichkeit Bitmasken zu erstellen bzw. ein Bit mit der entsprechenden Wertigkeit zu setzen. Eventuell hilft die ja die Codesammlung --> http://www.mikrocontroller.net/forum/codesammlung?filter=TWI weiter, dort sind ein paar TWI Beispiele schon in ASM :-)
Hallo! Danke für die Antwort, habe mal einige Codes angeguckt. Mit dem Ergebniss, dass es alle etwa so machen wie auch ich:
1 | ldi r16,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN) |
2 | STS TWCR,r16 ;In den Besipielen steht hier OUT |
3 | |
4 | twistart1: clr r16 |
5 | |
6 | |
7 | lds r16, (1<<twint) |
8 | Rcall USARTSent ;R16 'debuggen' = R16 = TWINT = 0 |
9 | |
10 | LDS r16,TWCR ;In den Besispielen steht hier IN |
11 | Rcall USARTSent ;R16 'debuggen' = R16 = TWCR = 36| 0x24 | 0b100100 |
12 | |
13 | sbrs r16, TWINT |
14 | rjmp twistart1 ;und hier ist die Endlosschleife perfekt!! |
15 | |
16 | |
17 | |
18 | loop33: |
19 | rjmp loop33 |
Habe keine Ahnung, warum das nicht geht, sitze, und vergleiche schon seit Stunden (Tagen??) über diese 3 Codezeilen, und weiß wirklich nicht mehr weiter. Bin für jede Hilfe dankbar!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.