- LiTime Speicher und Akkus         
Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 42

Thema: Controller als I2C Slave mit Bascom

  1. #21
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Anzeige

    Powerstation Test
    Hi
    Ich muß mein gesagtes etwas revidieren! Mit der Software I2C LIB von Bascom kann sehr wohl ein Hauptprogramm nebenher laufen.

    Es gibt da nur ein paar Dinge die man beachten muß. So müssen alle am Bus befindlichen I2C Teilnehmer auch das I2C Protokoll korrekt beherrschen. Und das ist leider bei selbst gebastelten Routinen nicht immer der Fall. Beispielsweise ist vielen (auch bis vor kurzem mir) nicht bekannt, das der SLAVE den Master bei der Übertragung anhalten kann indem er von sich aus das Clock Signal auf Masse hält. Der Master muß also immer kontrollieren ob das Clock Signal auch wirklich High ist wenn er es nicht auf Low zieht. Das wird von vielen Routinen offenbar nicht berücksichtigt weshalb es dann zu Problemen kommt. Das war auch der Grund warum das Hauptprogramm bei mir nicht weiter lief, es lag an einer I2C Routine für den Serbobaustein (wird inzwischen geändert). Dadurch ist die Bascom LIB nicht mehr aus dem Interrrupt raus gekommen.

    Bei der Bascom Lib ist es generell so das das Clock Signal vom Slave auf Low gelegt wird bis die Bearbeitung der Basic-Routine 'I2c_master_has_data' abgeschlossen ist. Wenn dies also zu lange dauert, dann muß der Master warten. Wenn das Protokoll richtig verwendet wird, ist das auch kein Problem. Das Hauptprogramm stoppt dann nur, während die Funktion 'I2c_master_has_data' abgearbeitet wird.

    Aber wie gesagt, wenn der Master nicht wartet, dann gibt es ein Problem!
    Das witzige daran ist, das selbst die I2C-bascom Funktionen sich offenbar nicht korrekt daran halten. Zwar kommt es hier nicht zu einem "hängenbleiben", aber es werden I2C-Übertragungen übergangen (kommen also nicht beim Slave an).
    Offenbar hat der Bascom Entwickler selbst nicht daran gedacht, was er später in der Libary dokumentiert hat.
    Ich gehe mal davon aus das dies bald korrigiert wird.

    Im Augenblick bleibt einem also nichts anders übrig als in der Funktion 'I2c_master_has_data' nicht so zeitaufwendige Dinge zu machen. Wenn man sich daran hält, dann gibts keine Probleme!

    Gruß frank

  2. #22
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Noch zur Info: Die Bascom I2C-Lib kommt offenbar nicht mit dem I2CSEND Befehl zurecht, welcher mehrere Bytes überträgt!

  3. #23
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Erst das positive: Habe dem Bascom Entwickler darüber informiert das seine I2C Befehle nicht auf den Slave warten! Er hat sogar schon innerhalb von Stunden Bugfix geschickt! Das nenne ich Support!

    Jetzt das negative: Bugfix funktioniert noch nicht richtig Bleibe aber am Ball und poste das noch sobald es 100% geht!

  4. #24
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    So noch eine Berichtigung: Das die I2C-Slave Lib nicht mit dem I2CSEND Befehl zurecht kam, lag auch an einem Bug in den normalen I2C-Befehlen von Bascom.
    Ich hab den letzten Fehler in der Bascom Libary i2c.lib nun selbst gefunden und korrigiert. Zusammen mit dem Patch vom Bascom Entwickler funktioniert nun alles bestens. Ich habe das an den Bascom-Entwickler weitergegeben, denke er wird die korrigierte Lib zum download bereitstellen.

    Wer sie dringend braucht kann Email hier posten, ich erläutere dann Korrektur! Wie gesagt, normalerweise hat man mit den Bascom I2C-Befehlen keine Probleme, mit den meisten Bausteinen kommt Bascom problemlos klar. Aber es gibt auch Slaves die den Master zum warten zwingen um die Daten gleich bearbeiten zu können. In einem solchen Fall gibt es derzeit oft Probleme mit Bascom. Diese können mit der neuen Libary behoben werden.

  5. #25
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Hier kann nun die korrigierte I2C-Libary geladen werden:
    http://www.mcselec.com/download/avr/beta/i2clib.zip

    Einfach in das Unterverzeichnis LIB des bascom-Compilers kopieren (egal ob Vollversion oder Demo).

    Gruß Frank



    Nachtrag:
    Leider geht der LInk derzeit oben nicht. Abe rin Kürze kommt die neue Bascom Version wo die korrigierte Lib enthalten ist

  6. #26
    paedi
    Gast

    I2C HW Implementation

    Hat den jemand zwischenzeitlich mit dem HW I2C slave z.B. des M8 gearbeitet?

    Gruss Peter

  7. #27
    Gast
    Hi!

    Bei Atmel direkt gabs ein paar Infos, die Reste findest du unter

    http://www.avrfreaks.net/Tools/showtools.php?ToolID=77

    mfg
    nollsen

  8. #28
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Dieser Code auf der AVR Seite ist bekannt. Es ist aber eine Software-Impementation. Diese entspricht in etwa der Bascom-I2C Slave Lib, wobei die von Bascom noch etwas verbessert ist.
    Gesucht wird aber mehr eine Hardware I2C Slave Implementation. Aber dazu hat MCS bald was fertig.

  9. #29
    Gast
    Hallo Freunde (Hellmut)

    Dieses Thread ist nun schon eine Weile still, hier meine Aufgabenstellung. Meine RN-Mega8 soll die Impulslaengen an den Servosteckplaetzen eines 8-Kanal-Empfaengers meiner F14 Fernsteuerung von robbe messen, die gemessene Laenge einer von 256 moeglichen Laengen zuordnen und dann wenn er feststellt das sich die Impulslaenge veraendert hat diese Aenderung an die RN-Control ueber I2C melden.

    Ich teile die Impulslaengen zwischen 1ms und 2ms in 256 Schritte und trage in einer Tabelle fuer alle 8 Steckplaetze den aktuellen Wert ein, falls dieser sich geaendert hat. Da der Empfaenger die Impulse an die Servos 1 bis 8 sequentiell und direkt nach einander anlegt, muss ich im laengsten Fall mit 8x 2ms = 16ms plus einem Puffer fuer Variationen einer speziellen Hardware fuer die Impulslaenge reservieren. Das heisst ich habe in diesem Fall nur gute 3ms fuer sonstiges wie den I2C-Verkehr zur Verfuegung.

    Wenn ich diesen Thread richtig lese, so muesste die RN-mega8 als I2C slave den I2C-Clock alle 20ms solange auf low halten um so sicherzustellen das die I2C Kommunikation steht bis die RN-mega8 Zeit hat? Ausserdem muesste der I2C Master durch diesen Vorgang nicht eingefroren werden.

    Das macht fuer mein System keinen Sinn, da dadurch mein verteiltes System vermutlich lahm gelegt wird. Ich plane eine RN-Control und 3 der Fahrtregler von stupsi plus 2 mega8 Minimalsysteme zur Impulslaengenmessung plus 1x I2C zur Displaysteuereinheit alle ueber einen I2C Bus verbunden! Ich muss aber sicherstellen, dass alle 20ms Aenderungen an den Servosteckplaetzen im System weitervermittelt werden. Das Antwortverhalten des Systems auf Steuerbefehle des Benutzers an der Fernsteuerung muss verzoegerungsfrei wirken.

    Habt ihr eine Idee? Ist vielleicht I2C nicht der beste Bus um die Impulslaengen an die RN-Control zu senden? Der Datensatz der Impulslaengenuebermittlung je Kanal wird wohl 3 Byte lang sein, 2 Byte (jedes Bit einem Kanal zugewiesen) 1 Byte um die Impulslaengeninfo zu kodieren. (Ich verwende einen 8-fach Multiprop der aus einem Proportionalkanal 8 proportionale Kanaele macht, daher 16 Bit fuer (8+8-1)

    Hellmut aus dem Ausland

  10. #30
    Gast
    Zitat Zitat von Frank
    Dieser Code auf der AVR Seite ist bekannt. Es ist aber eine Software-Impementation. Diese entspricht in etwa der Bascom-I2C Slave Lib, wobei die von Bascom noch etwas verbessert ist.
    Gesucht wird aber mehr eine Hardware I2C Slave Implementation. Aber dazu hat MCS bald was fertig.

    das gibts doch auch bei atmel auf der hp unter application notes: AVR311: Using the TWI module as I2C slave.

    -- jetzt hab ich nur die Frage: Wie kann man diesen Code in Bascom benutzen, bzw. wie kann man eine Library einbinden (Assembler oder was auch immer), wie z.b. die i2slave lib ???
    gruß Werner...

Seite 3 von 5 ErsteErste 12345 LetzteLetzte

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus