- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 3 von 3

Thema: I²C-Erweiterung auf dem Asuro?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.11.2006
    Ort
    Dresden
    Alter
    43
    Beiträge
    7

    I²C-Erweiterung auf dem Asuro?

    Anzeige

    Powerstation Test
    Servus,

    für eine Projektarbeit wurde haben wir den Asuro etwas modifiziert. Die beiden Ports SDA und SCL wurden freigeräumt (Batterietest und Kollisionstaster entfallen dadurch). Zwei Ultraschall-Sensoren wurden dann montiert (SRF0. Diese können über I²C-Bus ausgelesen werden, möchte gern die Hardwareschnittstelle benutzen...

    Nur wie mache ich das, im Datenblatt der Sensoren steht, die können wie 24xx EEPROM's ausgelesen werden. Das hilft mir aber auch nicht weiter.

    Die grundsätzliche Reihenfolge beim Datenverkehr hab ich schon kapiert, glaub ich...

    TWEA, TWINT setzen

    1. Master sendet START
    2. Master sendet 7-bit Slaveadresse+0
    3. Slave sendet ACK
    4. Master sendet Command Byte
    5. Master sendet ACK
    6. Master sendet Daten Byte(s)
    7. Slave sendet ACK
    8. Master sendet STOP

    Kann ich wenn ich die Schnittstelle initialisiert habe, einfach sowas schreiben wie im Datenblatt...

    Code:
    TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)  //Start Condition
    
    while (!(TWCR & (1<<TWINT)))   //warten bis Start condition raus
    ;
    
    if ((TWSR & 0xF8) != START)   //Kontrolle ob TWI-Status auf Start
    ERROR();
    
    TWDR = SLA_W;   //Slave Adresse in Datenregister schreiben
    TWCR = (1<<TWINT) | (1<<TWEN);   //Int-Bit löschen
    
    while (!(TWCR & (1<<TWINT)))   //warten bis Adresse raus
    ;
    
    if ((TWSR & 0xF8) !=  //Kontrolle ob TWI-Status auf Adressierung
    MT_SLA_ACK)
    ERROR();
    TWDR = COMMAND;   //zu sendende Befehle holen
    TWCR = (1<<TWINT) | (1<<TWEN);  //Int-Bit löschen
    
    while (!(TWCR & (1<<TWINT)))   //warten bis Befehle raus
    ;
    
    if ((TWSR & 0xF8) !=   //Kontrolle ob TWI-Status auf Datenübertragung
    MT_DATA_ACK)
    ERROR();
    
    TWDR = DATA;   //zu sendende Data holen
    TWCR = (1<<TWINT) | (1<<TWEN);  //Int-Bit löschen
    
    while (!(TWCR & (1<<TWINT)))   //warten bis Daten raus
    ;
    
    if ((TWSR & 0xF8) !=   //Kontrolle ob TWI-Status auf Datenübertragung
    MT_DATA_ACK)
    ERROR();
    
    TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);  //Stop Condition
    Würde es so in etwa funktionieren?? Habe noch nicht so riesig viel Erfahrung in µC-Programmierung.
    Wer hat denn schon mal sowas gemacht, ich bin doch nicht der Erste??

    Grüße,

    DanielSun

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    Nein, der erste bist du nicht. Es gibt schon nen Haufen fertige avr-gcc-Bibliotheken dafür.
    Die wohl bekannteste I2C-lib ist die von Peter Fleury:
    www.jump.to/fleury
    Damit kann man sowohl Hardware- als auch Software-I2C implementieren.

    PS: Spannungsüberwachung und Tasten könntest du über eine I2C-ADC wieder anschließen.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.11.2006
    Ort
    Dresden
    Alter
    43
    Beiträge
    7
    Ok Danke erst mal genau so etwas habe ich gesucht, werde die lib mal durchstöbern. Da kommen dann bestimmt noch Fragen.

    Ja das mit den Tastern und der Spannungsüberwachung hatte ich mir auch so ähnlich gedacht. Über I²C sind ja auch digitale und analoge Porterweiterungen möglich. Aber die US-Sensoren sind erst mal primär unsere Aufgabe. Das Projekt soll ja schließlich bis Mitte Januar fertig sein. Die Kollisionstaster können ja dann als zweite Ebene arbeiten, falls die US-Sensoren was nicht erkennen.

    So dann,

    DanielSun

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test