Guten Morgen zusammen, hier wird oft von vorhandenen I2C Routinen zum einbinden gesprochen. Wo finde ich die Dinger (in CPP) Gruß aus Berlin Ingo
Hallo ein Klasse Beispiel auf ATmega88 Basis findest Du auf der Internet Seite des computer club 2 http://www.cc-zwei.de/wiki/index.php/ATM18::Projekt::I2C_Tester Viel Spaß beim Stöbern Daniel
In .cpp gibts da eher nix. In C schon, z.B. in hier in der ((Achtung! Geheimtip:) Codesammlung, oder bei Peter Fleury. Oliver
Hallo Oliver, ;-) im Geheimtipp habe ich schon gesucht und bin auch zu deinem Ergebniss gekommen >> In .cpp gibts da eher nix. Gruß Agent Ingo p.s. werde mal bei Peter Fleury schauen.
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.
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; }
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
Hallo Oliver, mir geht es eigentlich jetzt nur darum ob ich mit den berechneten Werten und der Programmsequenz das EEPROM richtig anspreche. Gruß Ingo
Kannst ja mal hiermit vergleichen: http://extremeelectronics.co.in/avr-tutorials/easy-24c-i2c-serial-eeprom-interfacing-with-avr-microcontrollers/ http://www.extremeelectronics.co.in/avrtutorials/download/24c64_atmega32.zip Oliver
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.