Nabend. Wollte fragen, ob jemand Erfahrungen mit TWI und dem ARV Studio hat. Mein problem ist, wenn ich das TWI initialisiere, dann schicke ich zwar auf das twcr Register bei twint eine eins, doch es bleibt auf null. In der main Schleife angekommen, kann ich dann Tage warten, bis das TWI einen Interrupt auslöst. Ist das Problem bei dem AVR Studio, oder hab ich da einen Fehler in der Init... Könnt ihr bitte mal einen Blick drauf werfen... Danke Gruß Avus .include "m8def.inc" .def temp = r16 .equ clock = 8000000 .equ twi_bit_rate = 32 .equ SCL_FREQ = clock/(16 + (2*twi_bit_rate*(4^0))) rjmp Init .org 0x011 rjmp twi_interrupt Init: ldi temp,low(ramend) out spl,temp ldi temp,high(ramend) out sph,temp ldi temp,(1<<twint)|(1<<twea)|(1<<twen)|(1<<twie) out twcr, temp ldi temp,twi_bit_rate out TWBR,temp ldi temp,(0<<twps0)|(0<<twps1) out twsr,temp ldi temp, $d0 out twar, temp sei main: rjmp main
Es gibt einen netten,kleinen Servicepunkt. Nennt sich Stimuli. Dort kannst du für/bei einem bestimmten Programmschritt eine Reaktion des Simulators auslösen, z.B. einen Ausgang und/oder einen Eingang setzen oder löschen.
Hi Wolle, klingt interresant, das mit dem Stimuli, aber du hast leider meine Frage nicht beantwortet. Gruß Avus
Werden Flaggen nicht durch ne 1 gelöscht ? ;) (Gefährliches Halbwissen) dave PS: das hat bei mir funktioniert: (nach ner Stop irgendwie warten, sonst wird das ganze als wiederholte Startsequenz gewertet) twi_transmission: out TWDR, temp1 ldi temp1, (1<<TWINT)|(1<<TWEN) out TWCR, temp1 rjmp twi_wait twi_read: ldi temp1, (1<<TWINT)|(1<<TWEN) out twcr, temp1 rjmp twi_wait twi_start: ldi temp1, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) out TWCR, temp1 rjmp twi_wait twi_stop: ldi temp1, (1<<TWINT)|(1<<TWSTO)|(1<<TWEN) out TWCR, temp1 ret
@Dave hi, du hattest recht. Ich habs im Datenblatt gefunden, daß das I Flag mit einer 1 gelöscht wird. Du hast mir ja geschrieben, das Programm bei Dir ausschaut, aber wie siehts mit der Init von mir aus. Ist die in Ordnung? Gruß Avus
ldi temp1, 32 out twbr, temp1 Das wars bei mir ;) Aber im Datenblatt ist eh alles ganz genau beschrieben, einfach nochmal durchlesen (extra Code dabei, am Ende von "Using TWI") dave
ja, aber wo ist der Unterschied ob ich jetzt ldi temp1, 32 out twbr, temp1 oder .equ twi_bit_rate = 32 ldi temp,twi_bit_rate out twbr,temp mache? Gruß Avus
Ich hab ja nix gesagt, hab dir nur gesagt, wies bei mir aussieht ;) Bau die Hardware zusammen... davor kann man eh fast nix sagen bzw. macht sich viel zu viel Arbeit, was nacher nur 10sek dauert. dave
>>Bau die Hardware zusammen<<
Na ja. Ich bin erst beim Master Transmitter...
Wie der Code dann beim Slave Receiver ausschauen sollte, davon habe ich
momentan noch 0 Plan.
Deshalb möchte ich mal sicher gehen, daß der Code beim Master
Transmitter einwandfrei funktioniert, da sonst die Fehlersuche nicht 10
Sekunden sondern Tage dauern kann.
Gruß Avus
So, ich hab es jetzt mit einer Led probiert,das sie angeht, sobalt der TWI Interrupt ausgelöst wird. Aber es tut sich nichts... Hab auch versucht das twsta flag in der Init auf eine 1 zu schreiben. Doch es tut sich nichts. Wann muß das twsta flag gesetzt werden=? in der Init oder erst im Interrupt. Danke für jede Antwort Gruß Avus
Bist du beim Receiver? STA = START Condition. Darf der Master dann, wenn er anfängt was zu schreiben. Bau noch ne Timeout ein. dave
Hi Dave... Ich bin noch beim Transmitter... das flag twsta hab ich gesetzt, doch es tut sich nichts, im AVR Studio und im Atmega 8 auch nichts... Wo soll ich ein Timeout einbauen??? Ich poste mal das ganze programm, vielleicht hat mal wer kurz Zeit, um zu schauen, warum mein Interrupt nicht kommt. Den Interrupt habe ich mit einschalten einer Led verbunden. Danke im voraus Gruß Avus
Du weißt schon, dass du mit ldi temp,(1<<twsta) out twcr,temp Die anderen Bits im Register löscht? dave
Ach ja... das ist nicht gut... Dann gehört es wohl eher am Anfang in die Interruptschleife... Aber das funktioniert leider auch nicht... Irgendein Flag fehlt mir noch, um den Interrupt auszulösen... Hast du sonst noch was gesehen? Gruß Avus
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.