Gast
#2037756
Hallo, ich habe es entlich geschafft meinen USI als TWI zu initialisieren, aber ich bekomme keine Daten raus. Was muss ich setzten, damit das Schieberegister seinen Inhalt ausgiebt? mfg Matthias
|
Anzeige
|
Attiny2313 USI Schieberegister will nicht
Gast
#2037756
Hallo, ich habe es entlich geschafft meinen USI als TWI zu initialisieren, aber ich bekomme keine Daten raus. Was muss ich setzten, damit das Schieberegister seinen Inhalt ausgiebt? mfg Matthias Das USITC-Bit in USICR 8x setzen.
Gast
#2037803
Ja durch setzten des USITC bits erzeuge ich meinen Takt, aber aus SDA kommt nichts. mfg Matthias
Gast
#2037825
Das Schieberegister muss nochmal separat getaktet werden. Funktioniert mit folgender Anweisung: USICR |= (1<<USICLK); // Shift USIDR to next Bit Markus schrieb: > Das Schieberegister muss nochmal separat getaktet werden. Nö, muss es nicht. Matthias schrieb: > aber aus SDA > kommt nichts. Ist SDA als Ausgang geschaltet? das betreffende Bit in DDRn muss gesetzt sein. Und Du musst natürlich vorher Daten ungleich 0`und ungleich 255 in USIDR eintragen, damit Du am Ausgang was siehst. Siehst Du die Clockpulse an SCL?
Gast
#2037837
Ich setzt jetzt USICLK gleich mit dem Takt, müsste also ein durchgehender Datenstrom sein. Es kommt aber nichts, SDA ist trotz pull up immer Low? Auszug:
Gast
#2037842
Hier mein derzeitiges versuchs asm, Takt kommt ohne Probleme. Kommentare stimmen oft nicht!
Gast
#2037850
Hi Nur mal so: Was stört dich eigentlich an dem Beispielcode aus dem Datenblatt? MfG Spess
Gast
#2037868
Ich finde nur das für SPI und da tut sich nichts
Gast
#2037874
Ich hab mich mit AVR Assembler noch nicht beschäftigt aber ich kann dir meine Funktionen in C als Beispiel geben, evtl kannst du sie ja in Assembler umschreiben. Habe damit schon ein mittleres Projekt realisiert und hat einwandfrei geklappt. Die erste Funktion ist zur Initialierung. Die zweite Funktion schickt 8 Bits auf die SDA Leitung. Start und Stop Bedingung hab ich in einer anderen Funktion realisiert. Das USIDR befülle ich vor dem Aufruf der zweiten Funktion mit Daten.
Gast
#2037887
Übrigens, musst du PORTB.5(SDA) und PORTB.7(SCL) auch auf High schalten sonst werden die Busleitungen dauerhaft auf Low gezogen. SCL wird zusätzlich auch immer auf Low gezogen wenn eine Startbedingung vorkommt. Woher weißt du, dass SDA immer auf Low ist? Hast du LEDs dran oder ein Oszi?
Gast
#2037889
Oszi!
Gast
#2037895
Kann sein das dass Schieberegister erst Daten ausgiebt, wenn die Startbedingung korrekt abgewickelt ist?
Gast
#2037898
Hi Der Ausgang ist PB6! Und der Pin ist in deinem Programm Eingang . MfG Spess
Gast
#2037901
Nein, bin mir sicher. Die Startbedingung ist nur für deine Slaves von Bedeutung. Hast es schon versucht mit PORTs auf High setzen?
Gast
#2037915
Einzeln mit sbi/cbi kann ich alles setzten. Was ist mit PB6? ist bei TWI nicht Verwendet. Kann das c prog leider nicht zu 100% umsetzten, da ich es nicht kann
Gast
#2037967
Ich habe schon zick varianten mit USITC USICLK versucht, aber es kommt nichts aus dem Schieberegister. Hat nich jemand eine Idee? (hab den Attiny auch schon getauscht) mfg Matthias
Gast
#2037973
HI >Hat nich jemand eine Idee? (hab den Attiny auch schon getauscht) Beitrag "Re: Attiny2313 USI Schieberegister will nicht" MfG Spess
Gast
#2038043
@Spess also ich seh nicht wo er PB6 verwendet hat. @Matthias Am Controller selbst liegt es nicht. Aber es stimmt schon, den TWI beim AVR zu implementiern ist ein bisschen umständlich aber machbar.
Gast
#2038096
Hi
>@Spess also ich seh nicht wo er PB6 verwendet hat.
USI und Schieberegister haben bei mir SPI assoziiert.
Was in DDRB steht ist bei TWI egal. Die Einstellung wird vom TWI
überschrieben. Allerdings geht bei TWI ohne Pull-Up-Widerstände nichts.
SCL und SDA können die Leitungen nur auf L ziehen, aber kein H ausgeben.
MfG Spess
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|