I2C Routinen in Cpp

#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;
}

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