I2C Routinen in Cpp

#1292114
Ingo Laabs schrieb:
> Hallo Oliver,
> ;-) im Geheimtipp habe ich schon gesucht und bin auch zu deinem
> Ergebniss gekommen >> In .cpp gibts da eher nix.

Ich versteh nicht ganz.
Wo liegt dann jetzt das Problem?

Um 3 Funktionen eine Klasse drumherumschnitzen kann doch nicht das 
Problem sein.
OP #1293840
Habe jetzt mal eine Schreibroutine zusammen gewürfelt. Kann aber leider 
noch nicht sagen ob sie so in der Form funktioniert da EEPROM noch im 
Bastelladen. Vlt kann ja mal einer drüber schauen ob alles so OK ist,
bzw. meckern und mich zusammen stauchen wenn was falsch ist.


#include <stdlib.h>
#include <avr/io.h>
#define F_CPU 12000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/twi.h>

// Mega 32 CPU 12 MHz
//  EEPROM 24c08 100 KHz

int main (void)

{
TWSR = (0<<TWPS0) | (0<<TWPS1);        // Prescaler 1
TWBR = 0x34;                          // berechnung ergab 52


TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);  // start senden
while  (!(TWCR & (1<<TWINT)));              // warten bis fertig



TWDR = 0xA0;                  // Controll BYTE fur 24c08  OxA1 = lesen 
!!
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));


TWDR=0x0;              // Adresse im EEPROMs
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));          // warten bis fertig


TWDR = 0xF0;              //Daten an das EEPROM senden
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));          // warten bis fertig

TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);   // und STOP senden
while  (!(TWCR & (1<<TWINT)));           // warten bis fertig

while(1)
  {
     // Nüscht machen !
  }

 return 0;
}
Gast #1293874
Wo ist denn da nun .cpp?

Für stinknormales C funktionieren die o.a. Quellen wunderbar. Da 
brauchst du das Rad nicht nochmal zu erfinden. Zusätzlich gibt es auch 
noch ein C-Code-Beispiel im AVR-Datenblatt. Alles geprüft und lauffähig.

Mir fehlt in deinem Code die Fehlerbehandlung.

Oliver

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.