- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: I2C für Tiny26 - Assembler.

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Anzeige

    E-Bike
    Hallo Joe,

    Ob das Programm von oben funktioniert, kann ich nicht so sagen, ich habe mir meine eigene Routine programmiert, die zufälligerweise auch einen Slave macht, der ... 2 Motoren per L293 ansteuert und 2 Radencoder , die ich aus einer alten Kugelmaus gebaut habe per Pinchange Interrupt ausliest.
    Leider bin ich noch nicht ganz fertig damit, sonst hätte ich das ganze veröffentlicht.
    Die eigentliche I2C Slave Routine klappt aber schon sehr gut auf einem Tiny24.
    Welchen µC man nimmt ist es eigentlich Wurst, hauptsache, der hat eine USI.
    Wenn Du mir Deine E-Mail Adresse per PN schickst kann ich Dir mein Programm als Alpha Tester zukommen lassen

    Ich habe auch mehr oder weniger eine Appnote von Atmel verwendet und etwas auf meine Bedürfnisse abgeändert.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    61
    Beiträge
    199

    I2C

    @Besserwessi: der Code oben ist ein Slave und kein Master (wie Du vermutet hast).

    @oberallgeier: der Code oben läuft, so wie er oben zitiert ist. Allerdings fehlt dann die Funktionalität, mitten in der Übertragung oder nach irgendeinem Byte mit einer Stop-Condition oder Start-Condition vom Master zu operieren. Wenn man diese auskommentierten Zeilen aktiviert, werden die meisten Übertragungen allerdings durch fehlerhaft erkannte (aber nicht vorhandene) Stop-Condition abgebrochen. Das kann man so umschiffen:
    Man fragt die Stop-Condition nur während der ersten SCL clock des nächsten Bytes ab, dann gibt es weniger Fehler aber die Funktionalität ist da.

    man muß dazu folgende Code Sequenz im Code oben:
    • ; the master sends data to the ATtiny26
      ldi Temp1,(1<<USIOIF)+0x00 ;16 SCL edges
      out USISR,Temp1
      ldi Temp1,0 ;ACK=0
      out USIDR,Temp1 ;bit 0 will be send as ACK
      ; wait until the master sends the Data Byte
      write_2: ; sbic USISR,USIPF ;stop condition detected?
      ; rjmp main_loop
      sbrc Flags,START_DETECTED ;start condition detected?
      rjmp start_cond
      sbis USISR,USIOIF
      rjmp write_2




    durch die folgende ersetzen:

    • ; the master sends data to the ATtiny26
      ldi Temp1,(1<<USISIF)+(1<<USIOIF)+(1<<USIPF)+0x0E ;2 SCL edges
      out USISR,Temp1

      ;wait for 1 SCL clock to detect stop condition or new start condition
      first_SCL:
      sbic USISR,USIPF ;stop condition detected?
      rjmp main_loop
      sbrc Flags,START_DETECTED ;start condition detected?
      rjmp start_cond
      sbis USISR,USIOIF
      rjmp first_SCL

      ldi Temp1,(1<<USISIF)+(1<<USIOIF)+(1<<USIPF)+0x02 ;14 SCL edges
      out USISR,Temp1

      ; wait until the master sends the Data Byte
      write_2:
      sbis USISR,USIOIF
      rjmp write_2


    Als I2C Master benutze ich die Bibliothek von Peter Fleury, die man auf seiner Homepage herunterladen kann, und zwar den Part, der in rein in Software (ohne Nutzung des TWI-Moduls) für eine C-Compilierung in GNU-Assembler codiert ist.

  3. #13
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.687
    Hallo uffi, hallo izaseba, erst mal danke
    Na ja, es kommt Arbeit auf mich zu - aber JETZT hab ich ein bisschen mehr Plan
    Ciao sagt der JoeamBerg

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    30.06.2007
    Ort
    Esslingen
    Beiträge
    13
    [quote="izaseba"]
    Ich habe hier einen USI slave seit paar Monaten auf einem Tiny24 laufen, ich prüfe auch den USIPF, kann aber keine Probleme feststellen.
    Der Slave rennt um sein Leben
    [quote]

    Hallo Sebastian,

    ich stecke noch ganz am Anfang meiner Assembler-Karriere und möchte auch einen TWI-Slave auf einem ATtiny 2313 realisieren. Scheint aber nicht ganz trivial zu sein.
    Es wäre super nett, wenn Du mir bitte Deinen ASM-Code als Beispiel zur Verfügung stellen könntest?

    Vielen Dank im Voraus und viele Grüße

    Jörg

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo Jörg,

    Sorry, daß ich mich bis jetzt nicht gemeldet habe, die Benachrichtigung bei neuen Posts hat aber nicht funktioniert

    Ja, schau mal auf meiner HP rein, da ist ein 'halber' Slave
    Halb deswegen, weil ich den nur beschreiben wollte.
    Für den auszulesen muß nur etwas im usi overflow Interrupt geändert werden.
    Das kann ich bei Bedarf auch noch einfügen.

    Sonst habe ich heute noch einen usi Master geschrieben, schau
    Vielleicht ist es auch was.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    61
    Beiträge
    199
    Also mein I2C Slave läuft jetzt. Die Implementierung ist interrupt-basiert. Codierung in Assembler auf einem ATtiny26. Den Source Code kann man sich hier ansehen:

    http://freenet-homepage.de/uffmann/Ultrasonic2.html

    Bediene sich wer mag.

    Gruß, uffi.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Labornetzteil AliExpress