Hallo, Ich versuche gerade mit dem Attiny einen i2c-bus zum laufen zu brigen. Dazu verwende ich die i2c library von Peter Fleury, hab ich bei mehreren megas auch schon gemacht. Aber wenn ich jetz das Programm für den attiny in Codeblocks compillieren will kommen mehrere Fehler das er Register nicht gefunden hat z.B. TWSR, TWBR usw. Heißt das jetzt das der Controller gar kein Hardware I2c hat, oder heißen die Register da nur anders ? gruß Timo
Hi
>Heißt das jetzt das der Controller gar kein Hardware I2c hat,
Ja. Der ATTiny24 hat aber eine USI, die auch TWI kann.
MfG Spess
Erstmal danke für die schnelle antwort. Kann ich denn den attiny auch mit anderen controllern zusammen benutzen die richtiges hardware i2c haben ? und kennst du zufälligt irgentwo eine gute anleitung zum USI ? Gruß Timo
Hi >Kann ich denn den attiny auch mit anderen controllern zusammen benutzen >die richtiges hardware i2c haben ? Warum nicht? I2C ist I2C. >und kennst du zufälligt irgentwo eine gute anleitung zum USI ? Master und Slave mit PDF und Software: http://www.atmel.com/Images/doc2561.pdf http://www.atmel.com/Images/AVR310.zip http://www.atmel.com/Images/doc2560.pdf http://www.atmel.com/Images/AVR312.zip MfG Spess
Timo Tolksdorf schrieb: > und kennst du zufälligt irgentwo eine gute anleitung zum USI ? > Gruß Timo schau dir mal die Appnote AVR310 an. http://www.atmel.com/devices/ATTINY24.aspx?tab=documents
Ich habe probiert die Programme von atmel zu compillieren, aber ich habe wieder eine menge Fehler bekommen. Es gibt dorf auch includes die bei mir nicht existieren:
1 | #include <inavr.h> |
2 | #include <ioavr.h> |
Die programme wurden wohl mit einem anderen compiller entwickelt, ich verwende den avrgcc mit codeblocks. Gibt es da irgendeine Lösung für ?
Hi >Die programme wurden wohl mit einem anderen compiller entwickelt, ich >verwende den avrgcc mit codeblocks. Ja, Atmel bevorzugt IAR. >Es gibt dorf auch includes die bei mir nicht existieren: >#include <inavr.h> >#include <ioavr.h> Da hatte jemand schon mal das Problem: Beitrag "Einbinden von headern, bzw. vorcompilieren" MfG Spess
Ok, also so richtig hilft mir das nicht weiter. Ich habe für die beiden nicht gefunden includes einen ersatz für gcc gefunden, aber er gibt immernoch viele Fehler aus das er defines nicht finden kann, obwohl diese in der UDI_TWI_MASTER.h datei deklariert werden. Woran könnte das noch liegen ?
Ok, hab das problem gefunden! in der .h datei gab es keinen Eintrag für den ATTINY24 hab den noch hinzugefügt und jetzt übernimmt er die Werte. Probiere gleich noch ob es auch funktioniert.
Hi
>Woran könnte das noch liegen ?
Ich tippe auf deine C-Kenntnisse.
MfG Spess
Ok nachdem er den inhalt der .h Datei übernommen hat, musste ich nur noch ein paar delay Befehle ändern und nun funktioniert alles!! Vielen Dank für eure Hilfe. Gruß Timo
Hallo nochmal, Also alles funktioniert doch noch nicht, übertergungen klappen einwnadfrei, aber wenn ich 2 master chips im Bus habe blockiert der eine den anderen, auch wenn er gar nicht versucht zu senden. Nach einer übertragung wird der SDA PIN wieder auf high gesetzt der SCL PIN aber nicht. Obwohl der SCL PIN so wie ich das hier in der funtion sehe auch auf high gesetzt werden sollte. (Ausschnit aus der USI_TWI_Master.c)
1 | unsigned char USI_TWI_Master_Stop( void ) |
2 | {
|
3 | PORT_USI &= ~(1<<PIN_USI_SDA); // Pull SDA low. |
4 | PORT_USI |= (1<<PIN_USI_SCL); // Release SCL. |
5 | while( !(PIN_USI & (1<<PIN_USI_SCL)) ); // Wait for SCL to go high. |
6 | _delay_loop_2( T4_TWI ); |
7 | PORT_USI |= (1<<PIN_USI_SDA); // Release SDA. |
8 | _delay_loop_2( T2_TWI ); |
9 | |
10 | #ifdef SIGNAL_VERIFY
|
11 | if( !(USISR & (1<<USIPF)) ) |
12 | {
|
13 | USI_TWI_state.errorState = USI_TWI_MISSING_STOP_CON; |
14 | return (FALSE); |
15 | }
|
16 | #endif
|
17 | return (TRUE); |
18 | }
|
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.