I2C Routinen in Cpp

#1292114
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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

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