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

Thema: Was macht mein Controller wirklich?

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    Anzeige

    E-Bike
    Hi!

    SPI oder I²C?

    Hast du den I²C mit den Registern programmiert?
    Da kann ich dir leider nix geben, aber Florian hat da mal was gemacht...

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  2. #12
    Gast
    Ne, ich habe es mit den BASCOM-Befehlen gemacht

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    Hi!

    Die I²C sache.

    Der Trick ist, dass man die Pins als Eingang definiert.
    Bin ich auch lange drauf reingefallen. Aber anders gehts wohl nicht...

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    24.11.2004
    Ort
    Ilmenau
    Alter
    45
    Beiträge
    16
    Hallo tobmic,

    danke erstmal für Deine Gedulg mit mir *g* und deine vielen Tips!

    Zum I2C:

    Ich häng mal meinen Code-Schnipsel vom Slave dran. An den entsprechenden Stellen habe ich eine Frage geschrieben....weil du den Tip mit den Pins als Eingangs gebracht hast. Das wird ja für den Slave gelten.

    Code:
    '-----------------i2c_slave_stk500.bas
    'mit i2c_master_radbaugruppe.bas verwenden
    '
    '----------------------------------------------
       'Deklarationen + Initialisationen:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    $lib "i2c_twi.lbx"                                          'das war die spezielle Library von MCS-Elektronics, weil die orginal nicht gefunzt hat bei I2C
    
    Config Portb = Output                                       'für LEDs als Kontrolle
    Config Sda = Portc.4                                        'Muss ich diese Pins trotzdem so deklarieren?
    Config Scl = Portc.5
    'und hier jetzt noch "Config Portc = Input"  '?
    
    'festlegen der Slaveadresse  -> stimmt das mit dem festlegen der Slave-Adresse? da war ich mir nie sicher
    Twar = &B1010_1110                                          'TWAR=&HAE=Slaveadresse
    
    Dim A As Byte
    Dim Hilf As Byte
    
    'I2C initialisieren
    I2cinit                                                     'setzt Port und DDR-Bit auf 0 zurück
    Portb = &H00                                                'lässt PortB leuchten
    A = 90                                                      'vom Master gesendetes Byte -> entspricht &B0101_1010
    
    Do
    Hilf = Twdr                                                 'Datenregister auslesen
    If Hilf = A Then
     Portb = Not Portb                                          'alle LEDs blinken wenn Byte empfangen
     Waitms 200
     Else
      Portb.4 = Not Portb.4                                     'ansonsten blinkt nur LED4
     Waitms 200
    End If
    
    Loop
    
    End
    
                                                        'end program

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    Hi!

    Ich glaube, du stellst es dir ein bisschen einfacher vor, als es ist...
    Du musst noch ein paar dinge machen:
    - TWI-Bitrate einstellen
    - TWI-Prescaler einstellen siehe 1
    - In TWCR einstellen, dass er slave sein soll

    Und dann ncoh ein paar lustige Abfragen machen. Aber frag mcih nciht, ich habe das ncoh nie gemacht.
    Vielleich kan dir Florian einen Auszug aus seinem Assembler-code zukommen lassen (fragen).

    zu 1: Das kannst du mit nem kleinen Tool von mir machen, TwiBitrate
    das bekommst du auf meiner Homepage unter (anderes ->) Computer

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    24.11.2004
    Ort
    Ilmenau
    Alter
    45
    Beiträge
    16
    Bitrate und Prescaler habe ich beim Master eingestellt.
    Obiger Code ist vom Slave.
    Dessen Adresse habe ich auch in TWAR festgelegt (ein paar Zeilen nach den config-Befehlen)

    gruß
    christian

  7. #17
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    Hi!

    OH was schreibe ich in diesem Thread auch schon für Müll zusammen!
    SORRY. Natürlich passt sicher der Slave dem Master an.

    Siehe dazu auch das Datenblatt ab Seite 160, besonders das Diagramm auf Seite 166 ist interessant.

    Vielleicht hilft es auch, wenn man gemäß Abschnitt "Adress Match Unit" auf Seite 167 TWGCE auf 1 setzt. Und das ist Bit0 in TWAR, wie man auf ende Seite 170 anfang 171 sieht.

    statt
    Twar = &B1010_1110
    muss es
    Twar = &B10101111
    heißen. Oder?



    Bitte lies die mal den TWI-Abschnitt (ab S. 160) im Datasheet des M8 durch. Das wirkt manchmal Wunder...

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    24.11.2004
    Ort
    Ilmenau
    Alter
    45
    Beiträge
    16
    Hallo Tobi,
    nicht ganz.
    Das Bit muss gesetzt sein, wenn man einen "Generall Call" ausführen möchte.
    D.h. alle Slaves am Bus dürfen empfangen was der Master sendet.
    Den Prescaler habe ich auch gesetzt. (im Master).
    SCL hat eine Frequenz von 0.5MHz, weil der Slave mind. 16 mal schneller abtasten soll als das SCL-Signal ankommt. Nun, und mein Slave hat ne Frequenz von 8Mhz.

    Ich finds aber stark von Dir, dass Du mir soviele Hinweise, Tipps und mögliche Fehlerquellen nennst und dann noch so präzise Quellenangaben lieferst.
    Findet man nicht oft in Foren.

    THX@ tobmic!
    Christian

  9. #19
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    HI!

    *ARGH* JETZT REICHTs!
    So viele Fehler in einem Thread hab ich mir ja noch nie geleistet!
    Es heißt ja GCE also General Call Enable...
    Ich glaube, ich muss mich so langsam echt mal entschuldigen!

    *denkbevorschreib*
    >>Den Prescaler habe ich auch gesetzt. (im Master).
    Ja, gut. Das ist aber zunächst erst mal nebensächlich, solange der Master ein gescheites I²C-Signal sendet.
    (hast du das schon kontrolliert mit nem Oszi o.ä. ??)

    Was mir an deinem Code noch auffällt sind 3 Dinge:
    1) In deinen Slaveadressen gibt es Widersprüche
    2) Du nimmst keinerlei Einstellungen in TWCR vor.
    3) Man muss auf den Adress-Match Interrupt warten.

    zu 1)
    >>Twar = &B1010_1110 '= dez. 174
    >>A = 90 'vom Master gesendetes Byte -> entspricht NICHT 174
    Du musst in TWAR schon die Adresse setzen, die du auch überprüfen willst.

    zu 2)
    Du willst im Moment einen Slave mit der Daten-Unit machen. Das geht aber viel einfacher mit der Address Match Unit. Dass dein AVR aber weis, dass er ein Slave ist, und dass er die Adress Match Unit einschalte soll usw. musst du es ihm in TWCR sagen. Lies' dir das Datenblatt an der Stelle (s.u.) durch...

    zu 3)
    Die Adress Match Unit löst einen Interrupt aus. Auf diesen gilt es zu warten, damit man die TWI-Unit über TWCR anweisen kann, ein ACK (oder Non ACK) zu senden, und so den Master überhaupt dazu bringen kann, das Datenbyte zu senden.
    Dazu muss TWCR.0 auf 1 gesetzt, und SREG.7 auf 1 (äquivalent zu enable interrupts) gesetzt werden.
    Jetzt musst du dich noch schlau machen (und mir dann aber auch sagen, ich weis es nämlich nicht ) wie der TWI-Interrupt in Bascom heißt.
    Dann halt noch
    On ... TWIr
    In der ISR TWIr bearbeitest du dann das Signal weiter (Sendest ACK usw.)
    Daszu siehe wieder Abschnitt Adress Match Unit Auf S. 167, uns TWCR auf S. 168

    So. Jetzt habe ich aber HOFFENTLICH keine Bugs drin....

    >>Ich finds aber stark von Dir, dass Du mir soviele Hinweise, Tipps und mögliche Fehlerquellen nennst und dann noch so präzise Quellenangaben lieferst.
    Naja, aber ich erzähle auch viel Mist gerade!
    (Bin gerade viel mit meinem JuFo-Projekt beschäftigt...)

    >>Findet man nicht oft in Foren.
    Naja.

    Danke für die Blumen!

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    24.11.2004
    Ort
    Ilmenau
    Alter
    45
    Beiträge
    16
    Hallo Tobi,

    leider musste ich das Board wieder abgeben, da es nicht mein eigenes ist.
    Deshalb konnte ich Deine Vorschläge nicht "live" ausprobieren.
    zu 1). Twar ist das Adressregister, A=90 ist einfach nur eine gesendete Information die der Slave üernehmen soll
    2) und 3) klingen aber sehr schlüssig. Das schau ich mir mal näher an.

    gruß christian

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen