Hallo, ich suche Infos für Anfänger um an einem Atmega8 den TWI Bus zum laufen zu bekommen. Ich habe das AVR TWI gesehen, aber mich würde vor allem mal interessieren, wie ich PC4/5 dazu bringe kein Ein/Ausgang zu sein, sondern ein TWI zu sein. Also so ein richtiges Anfänger Tut. Grüße Sebastian
Gast
#1754802
Sofern auf PC4/5 das TWI hängt, einfach TWI per enable Bit einschalten. (Baudrate noch festlegen) Geh einfach mal das Datenblatt vom AVR durch, da ist das gut beschrieben. Im Prinzip muss deine software nur dem TWI einen Auftrag geben, dann warten bis das IRQ Flag gesetzt wird und entsprechend dem Status den Nächten Auftrag geben. Was wann wie gemacht werden kann und welche folgen es hat steht im.... Datenblatt :-) Tipp: Besorge die einen I2C Sniffer! Speicheroszi geht zwar auch, ist aber sehr mühsam.
Tim schrieb: > Was wann wie gemacht werden kann und welche folgen es hat steht im.... > Datenblatt :-) Naja, wenn man weiß wonach man suchen muss bestimmt toll, aber auf den 310 Seiten als Anfänger was zu finden nicht so toll ;) Ich hab die Fuse Bit Seite angeschaut aber da ist nicht passendes - kannst du mir auf die Sprünge helfen?
Gast
#1755302
Also ich würde ab der Seite 163 versuchen. Da startet die Beschreibung für TWI.
Sebastian E. schrieb: > Tim schrieb: >> Was wann wie gemacht werden kann und welche folgen es hat steht im.... >> Datenblatt :-) > > Naja, wenn man weiß wonach man suchen muss bestimmt toll, aber auf den > 310 Seiten als Anfänger was zu finden nicht so toll ;) Darum ist das Datenblatt ja auch in Kapitel organisiert :-) > Ich hab die Fuse Bit Seite angeschaut aber da ist nicht passendes - > kannst du mir auf die Sprünge helfen? Die Fuse Bits werden dir da nicht weiterhelfen. Hinweis: Es gibt ein Kapitel "Two Wire Serial Interface" Dreimal darfst du raten, worum es in diesem Kapitel geht Hinweis 2: Du hast dir im PDF hoffentlich das "Inhaltsverzeichnis" dazugeschaltet, auch wenn der entsprechende Schalter links mit dem Tooltip 'Bookmarks' versehen ist? (Das Blatt Papier mit der blauen Fahne)
Karl heinz Buchegger schrieb: > Hinweis: Es gibt ein Kapitel "Two Wire Serial Interface" > Dreimal darfst du raten, worum es in diesem Kapitel geht Schon klar... ich habe mir auch schon alles über die Kommunikation durchgelesen, aber den Part "Send START condition" braucht man denke ich nur um die Kommunikation einzuleiten, nicht aber für die Konfiguration der Pins oder?
Gast
#1755327
Versuch mal auf Seite 169 unter "SCL and SDA Pins".
Oje schwere Geburt... Für alle dies mal suchen: von Seite 169 landet man auf Seite 61. Da steht dann:
1 | |
2 | |
3 | |
Also man muss nichts aktivieren, es reicht wenn das TWEN Bit gesetzt wird. Das wiederum (so schauts mir auf Seite 177 aus) wird einfach im TWI Control Register (Befehl TWCR) erledigt. stimmts?
Gast
#1755780
Hi >Das wiederum (so schauts mir auf Seite 177 aus) wird einfach im TWI >Control Register (Befehl TWCR) erledigt. >stimmts? Ja. Und in der Beschreibung zum TWEN-Bit steht das Gleiche. MfG Spess
ahja wenn man das weiß kann man auch schonmal mit AVR TWI was anfangen ;) ich versuche nämlich den SAA1064 mit 2 7-Segmentanzeigen die ich auf meinem Breadboard zusammengesteckt habe zum laufen zu bringen ;) Das erweist sich als schwieriger als gedacht aber wenns einfach wäre könnts ja jeder 8)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
so ich hoffe jemand erbarmt sich und liest sichs mal durch. Was ich noch nicht verstanden habe: Gehören Subadressen mit in den Data Block? Wenn ja, der Datablock darf ja nur 8 Bit haben, also muss ich danach das ganze Spiel von vorne starten nur beim 2. mal mit den Daten? Danke für eure Geduld ;) Grüße Sebastian
Gast
#1757024
> so ich hoffe jemand erbarmt sich und liest sichs mal durch.
Ich versuchs mal...
1 | |
Warum? du hast aber schon extern 4,7K Pullups am BUS ja?
1 | |
TWEN passt ja noch, TWSTA = das TWI soll Master werden TWINT setzt hier das Flag zurück, gibt dem TWI also die freigabe zu arbeiten. Hat bei dir erstmal nix mit IRQs zu tun.
1 | |
Solange (!(TWCR & (1<<TWINT))) hast du am TWI NIX rumzufummeln. Da ding versucht nämlich gerade Busmaster zu werden (1<<TWSTA). Sollte das geklappt haben spring TWINT auf 1. Solange musst du *warten*:
1 | |
2 | |
3 | |
Dann das TWSR hohlen, putzen, auswerten und entsprechend Tabelle 99 Seite 180 handeln:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Jetzt must du das nur noch für alle anderen (relevanten) Statuscodes erweitern. Die Funktion rufst du immer dann auf, wenn das TWI seinen Auftrag erledigt hat.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Das ist kein funktionsfähiger (oder gar geprüfter) code.
Er soll dir nur den weg zeigen.....
Das TWI ist eine (billige) statemaschine.
Du gibst ihr einen Auftrag (Start||Stop||Daten) + TWINT=1 und
dann werkelt das teil. Wenn es eine Entscheidung brauch was
als nächtes zu tun ist setzt es TWSR + TWINT und wartet.
(Solange ist auch der Bus blockiert)
Alles was dein code tun ist die (richtige) entscheidung zu
fällen und dem TWI einen neuen Auftrag zu geben.
> Danke für eure Geduld ;)
Lies erstmal das Datasheet und verstehe wie das ding arbeitet.
Dann schreib code. Mit rumprobieren kommt du beim TWI NIE an ziel.
Hoffe du hast wenigstens einen funktionierenden UART um die
Status/Debuginfos ausgeben zu lassen.
Tim schrieb: >> Danke für eure Geduld ;) > Lies erstmal das Datasheet und verstehe wie das ding arbeitet. > Dann schreib code. Mit rumprobieren kommt du beim TWI NIE an ziel. > Hoffe du hast wenigstens einen funktionierenden UART um die > Status/Debuginfos ausgeben zu lassen. OK... also ich vergess das ganze dann mal und fang weiter unten an ;)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.