Forum: Mikrocontroller und Digitale Elektronik Attiny24A probleme mit TWI


von Timo T. (Firma: --) (grebnelloh)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Timo T. (Firma: --) (grebnelloh)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Timmo H. (masterfx)


Lesenswert?

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

von Timo T. (Firma: --) (grebnelloh)


Lesenswert?

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 ?

von spess53 (Gast)


Lesenswert?

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

von Timo T. (Firma: --) (grebnelloh)


Lesenswert?

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 ?

von Timo T. (Firma: --) (grebnelloh)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

>Woran könnte das noch liegen ?

Ich tippe auf deine C-Kenntnisse.

MfG Spess

von Timo T. (Firma: --) (grebnelloh)


Lesenswert?

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

von Timo T. (Firma: --) (grebnelloh)


Lesenswert?

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
Noch kein Account? Hier anmelden.