Hallo, Ich habe in der Schule diese Klasse für die Verwendung von I2C mit dem ATmega16 erhalten. Nun programmiere ich auf den ATmega64 und suche momentan den Fehler in meinen Programm und nachdem das Programm auf dem ATmega16 perfekt funktioniert hat und auf dem ATmega64 nicht, bin ich auf den Schluss gekommen, dass es vielleicht an der I2C Klasse liegen könnte. Weiß jemand ob ich da was ändern muss wenn ich die gleiche I2C Klasse verwende??? Danke für eure Hilfe
:
Bearbeitet durch User
Eine Klasse in C? Das wirst du so nicht finden. Aber die TWI/I2C Funktionen vom Peter Fleury sind nicht schlecht.
Ja ich programmiere im AVR Studio. Funktioniert diese für alle ATmega's gleich?
:
Bearbeitet durch User
Marcel D. V. schrieb: > Weiß jemand ob ich da was ändern muss wenn ich die gleiche I2C Klasse > verwende??? Fuse in MEGA64 richtig gesetzt ? Die Library ist auf 12MHz eingestellt. Wenn deine MEGA64 mit 2MHz oder weniger lauft, funktioniert es mit Sicherheit nicht, bei 4MHz sollte es noch gehen. Hardwaremassig ist I2C Teil bei beiden MEGAs gleich, wenn es auf M16 funktionert hat, muss es auch auf M64 gehen. Bleibt nur noch der Quartz als Ursache. Kann es sein, dass die neue MEGA64 auf internes RC Oszillator gefust ist ? Wenn du aber die CKSEL bits richtig gesetzt hast und einen Externen Quartz mit 12MHz hast, dann bin ich mit meinem Latein am Ende.
Hi >Hardwaremassig ist I2C Teil bei beiden MEGAs gleich, wenn es auf >M16 funktionert hat, muss es auch auf M64 gehen. Wenn die M103-Fuse (ATmega103 compatibility mode) gesetzt ist dann besitzt der ATMega64 gar kein TWI. MfG Spess
> Funktioniert diese für alle ATmega's gleich? Ich denke, ja. Nur die Zuordnung zu den I/O Pins ist natürlich bei jedem AVR Typ anders.
Danke für die Antworten. Aber ich habe rausgefunden, dass die I2C Klasse nicht das Problem ist.
Marcel D. V. schrieb: > Aber ich habe rausgefunden, dass die I2C Klasse nicht das Problem ist. Aha. Das ist aber wirklich nett von dir, dass du uns so ausfuhrlich geschildert hast, was das Problem war. Kannst ruhig wieder mal was anfragen.
spess53 schrieb: > Wenn die M103-Fuse (ATmega103 compatibility mode) gesetzt ist dann > besitzt der ATMega64 gar kein TWI. Agree. Auf jeden Fall (wenn er die MEGA nicht verkehrt herum eingesteckt hat) ein FUSE problem.
Danke für eure Antworten. Mein Problem war, dass ich zu viele Interrups hatte. Und es steht auch zu viel Code in einem Interrupt. Dadurch ergeben sich Verzögerungen, was bei einer Winkelberechnung mit einem Gyro sehr große Probleme gibt.
Marcel D. V. schrieb: > Mein Problem war, dass ich zu viele Interrups hatte. Und es steht auch > zu viel Code in einem Interrupt. Dadurch ergeben sich Verzögerungen, was Marcel D. V. schrieb: > momentan den Fehler in meinen Programm und nachdem das Programm auf dem > ATmega16 perfekt funktioniert hat und auf dem ATmega64 nicht, bin ich Sicher.
Auf dem ATmega16 habe ich nut das Programm für den Gyro geschtieben und das hat dort perfekt funktioniert. Auf dem ATmega64 habe ich dann zusätzlich 4 PWM Signale erzeugt und 4 PWM Signale mittels externen Interrupts ausgelesen. Da mein Code nicht optimiert war, hat es dort Verzögerungen bei den Berechnungen mit dem Gyro gegeben. Was bei einem Gyro zu einem falschen Winkel führt.
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.