Attiny24A probleme mit TWI

OP (Firma: --) #2700683
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
Gast #2700807
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
OP (Firma: --) #2700877
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 ?
OP (Firma: --) #2701163
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 ?
OP (Firma: --) #2701435
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren