-
        

+ Antworten
Ergebnis 1 bis 9 von 9

Thema: I2C übertragung will ned

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370

    I2C übertragung will ned

    Anzeige

    Hi,
    hab ein problem: 2x ATMEGA128, beide verbunden an Pind.0-->Pind.0 und Pind.1-->Pind.1 und gnd natürlich

    der eine sendet I2C was:
    $regfile = "m128def.dat"
    $crystal = 16000000

    Config Portd = Output

    Config Scl = Portd.0
    Config Sda = Portd.1


    Do
    I2cstart
    I2cwbyte 10
    I2cstop
    Wait 3
    Loop
    End

    '#########################################
    dewr andere soll es empfangen, es geht aber nicht. schon die startbedingung macht ihm zu schaffen. (siehe debug im kommentar) Der code zum empfangen läuft mit anderen devices prima...Ich logge mit ähnlichem code I2C aktivität an einer schnittstelle prima. Liegt es an dem obrern code das er nicht sendet???

    $regfile = "m128def.dat"
    $crystal = 16000000
    $baud = 57600

    Config Portd = Input
    'Portd = &B00000001 'interner Pullup an PD0 aktivieren


    Cl Alias Pind.0 'Clock an Pind.0
    Da Alias Pind.1 'SDA an Pind.1

    On Int1 Startchk
    Config Int1 = Falling


    Dim Adr As Byte
    dim c as Byte
    Dim i as byte

    Enable Interrupts
    Enable Int1
    On Int1 Startchk
    Config Int1 = Falling 'startbedingung: da fällt (es wird dann gecheckt ob CL=1)

    Do
    nop
    Loop
    End


    Startchk:
    If Cl = 1 Then
    Disable Int1
    'Gosub Rxdata (auskommentiert für debug)
    Print "got started" '(debug)
    End If
    Waitms 10
    Enable Int1
    Return

    Rxdata:
    Adr = 0
    C = 128
    For I = 1 To 8
    Do
    Loop Until Cl = 0
    Do
    Loop Until Cl = 1
    If Da = 1 Then Adr = Adr + C
    C = C / 2
    Next

    'ack überspringen
    Gosub Jmpack
    Return


    Jmpack:
    'ack überspringen
    Do
    Loop Until Cl = 0
    Do
    Loop Until Cl = 1
    Print Hex(adr)
    Return

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    Es scheint so als wären Pullup unbedingt notwendig. Habe interne pullup aktiviert, jetzt gehts

  3. #3
    Gast
    Hi Sebastian,

    möchte ebenfalls zwei Atmega verbinden (M16), kann deiner Programmierung nicht ganz folgen: In welche Variable schreibst Du den empfangenen Wert? Hast Du den Code selbst emtwickelt?

    Gruß Florian

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    Ja der code ist von mir.
    Die empfangene Variable wird in adr geschrieben.

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

    Ja, Pullups sind unbedingt notwendig.
    Allerdings sollten die extern sein.

    2x 4.7kOhm auf VCC, und du bist auf der sicheren Seite.

    Ganz liebe Grüße, Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    funktioniert prima mit den internen... habs ewig zum testen laufen lassen. gab keine schwierigkeiten. Ich denke das es auch danit zu tun hat das ich nur ca. 5cm leitung zwischen den beiden µ-Coms habe.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo warum nehmt ihr nicht 2 softwaremässige schnittstellen :
    Open "comd.2:115200,8,n,1" For Output As #1 ,(pin d2)
    Open "comd.3:115200,8,n,1" For Input As #2 ,(pin d3)
    sind problemlos und schmerzfrei.
    mfg pebisoft

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    zuviel rechenzeit.
    Ich hatte die senderoutine schon lange vorher fertig und in einer anderen anwendung am laufen. da diese anwendung ähnlich ist hat es sich angeboten, um den programmieraufwand niedrig zu halten

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

    ...und schneller.
    Einen UART hat der Mega128 sogar zwei, und der Mega16 auch einen.

    Mal ganz davon abgesehen, dass das ganze etwas problemloser läuft, ist's auch noch unter Bascom einfacher anzusteuern.

    Softwaremäßig emulieren würde ich nicht, denn das frisst unheimlich Power. Wenn das die Hardware macht, hat die Software damit garnix zu tun.

    Ganz liebe Grüße,
    Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

+ Antworten

Berechtigungen

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