Hallo, ich komme bei einem Projekt nicht weiter. Ich nutze einen Raspi (Master) als Bedienoberfläche und habe über den I²C Bus mehrere Schaltungen mit ATMEGA angeschlossen, die dann die gewünschten Aktionen auslösen und Rückmeldungen geben. Bei den Schaltungen mit ATMAGA 8 funktioniert das auch wunderbar. Ich habe aber auch eine Schaltung mit einem ATMEGA 16 und da gibt es Probleme. Die Software für die Übertragung habe ich 1:1 von den ATMEGA 8 übernommen. Und teilweise muss sie auch funktionieren, denn wenn ich mich die Busteilnehmer am Raspi anzeigen lasse, wird der ATMEGA 16 auch angezeigt. Sobald ich aber Daten abrufen will, gibt es Probleme. Ich gehe davon aus, dass es daran liegt, dass die Software ja für ATMEGA 8 geschrieben wurde. Gestern habe ich lange damit zugebracht, in den Datenblättern den Unterschied zwischen den TWI Schnittstellen den 8er und 16er zu finden. Allerdings habe ich keinen gefunden. Vielleicht liegt das auch an meinen beschränkten Englischkenntnissen. Meine Frage ist also. Gibt es einen Unterschied zwischen den Schnittstellen, den ich übersehen haben könnte und wenn ja, welchen?
Hi Hast Du in den Datenblättern geschaut, daß sämtliche benutzte Register identisch aufgebaut sind? Also, daß Du die Steuer-Bits auch beim 16er in das dafür vorgesehene Register schreibst und nicht 'irgendwo hin'. Weit hergeholt, aber gestern hatten wir hier eine verknotung bei Timern (aber offensichtlich, da Register zum Timer 1 mit Bits vom Timer 0 geladen wurden - funktionierte aber wegen dem gleichen Stellenwert, der Fehler lag noch wo Anders) MfG
Im Compiler das richtige Target eingestellt? Beim M16 ist die Vektortabelle anders.
Ich habe die Registernamen verglichen und keine Unterschiede gefunden. Also wenn ich keine Tomaten auf den Augen habe, sind sie identisch. Das Traget ist auch richtig eingestellt. Eclipse schimpft auch nicht.
Müsste der nicht unabhängig vom Controller des Slaves auftreten? Die Slaves mit dem M8 bereiten keine Probleme.
> Ich habe die Registernamen verglichen und keine Unterschiede gefunden. Tja, dann ist nun der Zeitpunkt gekommen, wo du uns das Programm zeigen solltest. > wenn ich mich die Busteilnehmer am Raspi anzeigen lasse, wird der > ATMEGA 16 auch angezeigt. Sobald ich aber Daten abrufen will, gibt > es Probleme. Welche Probleme? Was hast du ewartet, was passiert stattdessen? Wie sehen die Signale und die DC-Pegel denn aus? Welches Mess-Equipment (mit dem du umgehen kannst) hast Du zur Verfügung?
Mit welcher Frequenz laufen die ATmega8 bzw. der ATmega16? ("Slave operation does not depend on Bit Rate or Prescaler settings, but the CPU clock frequency in the Slave must be at least 16 times higher than the SCL frequency.")
Beide laufen auf auf 8MHz. Die anderen Daten muss ich erst zusammen stellen.
Nach erfolgreichem Urlaub kann ich mich wieder meinem Problem zuwenden. Ich habe das Programm (hoffentlich erfolgreich) aus eclipse exportiert und angehängt. Dabei möchte ich darauf hinweisen, dass der Code für den TWI Slave nicht auf meinem Mist gewachsen ist, sondern freundlicher Weise von Martin Junghans unter freier Lizenz ins Netz gestellt wurde. Auf einem Atmega 8 läuft alles wunderbar. Daten (einfache Zahlen zwischen 10 und 41), die ich im Feld xtbuffer ablege, kann ich auf dem Raspi (Python) mit "bus.read_i2c_block_data(Adresse, Position)" auslesen und Daten, die ich mit "bus.write_i2c_block_data(Adresse, Position, [Wert])" schreibe, landen an der entsprechenden Position im Feld rxbuffer. Der identische Code funktioniert auf dem Atmega 16 nicht richtig. Wenn ich mir auf dem Raspi mit "i2cdetect -y 1" die belegten Busadressen anzeigen lasse, wird der Atmega 16 zwar ordnungsgemäß angezeigt, aber ich kann die Daten vom Feld xtbuffer nicht wie oben beschrieben abrufen. Versuche ich es, so stürzt der Bus ab. Schicke ich mit dem Raspi Werte an den Atmega 16, so kommen sie ordnungsgemäß im Feld rxbuffer an. Das ist mir ein Rätsel. An Messtechnik steht mir leider nur ein Speicheroszi zur Verfügung. Allerdings denke ich, dass mir das nicht viel weiter helfen wird.
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.