Software-I2C Master von Fleury funktioniert nach wechsel von Mega16 zu 644 nicht mehr

Gast #2129140
Lesenswert?
• ▲
▼
Hi!

Eine typische Glaskugelfrage, aber vielleicht kann ja jemand einen Tipp 
geben, wonach ich suchen könnte:

Ich hatte einen Atmega16 im Einsatz und habe diesen nun gegen einen 
Atmega644 getauscht.

An PA6 und PA5 ist ein externes I2C-Eeprom (24x irgendwas) 
angeschlossen, wobei ich Software-I2C mit der Lib von Peter Fleury 
nutze. Hardware-I2C geht nicht da die Pins schon vergeben sind.

Mit dem Atmega16 hat das problemlos geklappt, aber seit dem Tausch hängt 
sich entweder das Programm auf, oder es werden nur Nullen aus dem Eeprom 
gelesen.
Lustig ist auch, dass ich keine Aktivität an PA5 und PA6 sehen kann 
(Ozi, LogicAnalyzer).
Wenn ich die Pins als Test im Programm als Low oder High definiere, sehe 
ich das. Die Hardware ist also ok.

Mein Eindruck ist, dass der gesamte I2C-Code einfach keine Wirkung hat, 
was ich nicht verstehe. Im Atmel-Dokument zur Migration von Atmega16 auf 
644 wurde ich nicht fündig, und spezielle Port-Funktionen gibt es auf 
PortA auch nicht die ich irgendwie nutzen würde.

Gibt es irgend welche Unterschiede zwischen dem Atmega16 ung 644, die 
sich so auswirken könnten?

Gruß,
Chris
Moderator (Firma: Titel) Persönliche Seite #2129168
Lesenswert?
• ▲
▼
Lass mal deine Hardwareinitialisierung (=Sourcecode) sehen.
Beim 644 gibts Pin-Change-Interrupts...

Chris schrieb:
> Lustig ist auch, dass ich keine Aktivität an PA5 und PA6 sehen kann
Das ist doch schon mal ein toller Ansatzpunkt.
Irgendwer müsste ja an den Leitungen rumzerren.
Warum tut er das nicht?
Der Sourcecode der Lib ist ja nun nicht megaunübersichtlich, da kann man 
problemlos die 3 Funktionsaufrufe nachverfolgen...
Gast #2129186
Lesenswert?
• ▲
▼
So sieht der eeprom-Teil aus (mittlerweile unschön verbastelt da ich 
seit einem Tag nach dem Fehler suche :( )

Von main.c aus werden nur Funktionen der exteeprom.c angesteuert.

Die Pin-Change Interrupts nutze ich nicht. Ich habe auch in der main.c 
eine Endlosschleife in main{} eingefügt um zu verhindern, dass irgendwo 
vom Rest des Programms etwas rein funkt, aber an den Pins tut sich immer 
noch nichts.

Wenn ich sie beim Programmstart low setze, bleiben sie low. Setze ich 
sie high, bleiben sie high.
Angehängte Dateien:
Gast #2129599
Lesenswert?
• ▲
▼
Ich habe das Problem nun gelöst. Wie immer war es eigentlich ganz 
simpel:

Durch einen (bisher nicht näher untersuchten) Fehler im makefile hat er 
beim make clean die Object-Datei des Assembler-Files nicht gelöscht, so 
dass er beim Make all auch nicht alles neu kompiliert hat. Dadurch 
stimmten natürlich die Konstanten für I/O usw. nicht mehr.

Chris

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.