- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: SD21 mit RN Mega2560 - I2C -Probs

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    36
    Beiträge
    478

    SD21 mit RN Mega2560 - I2C -Probs

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Also ich habe ein RN Mega2560 mit dem SD21 verbunden:

    Folgender Aufbau

    Lipo --> SD21 (Regelt auf 5V) --> RN Mega2560

    Das RN MEga2560 läuft soweit auch korrekt. ( Lässt sich flashen, LED kann ich blinken lassen. )

    SCL und SDA sind auch ordnungsgemäß miteinander verbunden.



    Code:
    '###################################################
    'erstebeispiel.bas  Demo zu Modul RN-Mega2560
    'für
    'RoboterNetz Board RN-Mega2560 ab Version 1.0 und
    '
    'Aufgabe:
    'Laesst LED blinken
    
    'Autor: Frank
    'Weitere Beispiele und Beschreibung der Hardware
    'unter http://www.Roboternetz.de oder robotikhardware.de
    'Eigene Programmbeispiele sind im Roboternetz gerne willkommen!
    '##############################################################
    
    'Diese Anweisung setzt die Fusebits automatisch korrekt (Syntax $PROG LB, FB , FBH , FBX )
    $prog , 255 , &B11011001 ,                                  'Quarz an / Teiler aus / Jtag aus
    
    $regfile = "m2560def.dat"
    $hwstack = 82                                               '80
    $framesize = 68                                             ' 64
    $swstack = 68                                               '44
    
    $crystal = 16000000                                         'Quarzfrequenz
    
    Config Pind.5 = Output
    Led Alias Portd.5
    
    Declare Sub SetServo(byval Servonumber As Byte , Byval Servospeed As Byte , Byval Servoposition As Word)
    
    Dim Servonumber As Byte
    Dim Servospeed As Byte
    Dim Servoposition As Word
    Dim Servo(4) As Byte
    
    Const Sd21_adress = &HC2
    
    I2cinit
    
    Do
     Led = 0  ' --> LED AN
     Waitms 100
      Call Setservo(0 , 20 , 1200)
     Led = 1
     Waitms 1000
    
     Led = 0
     Waitms 100
      Call Setservo(0 , 20 , 1800)
     Led = 1
     Waitms 1000
    Loop
    
    End
    
    Sub Setservo(byval Servonumber As Byte , Byval Servospeed As Byte , Byval Servoposition As Word)
    
      Servo(1) = Servonumber
      Servo(2) = Servospeed
      Servo(3) = Low(servoposition)
      Servo(4) = High(servoposition)
    
      I2cstart
      I2csend Sd21_adress , Servo(1) , 4
      I2cstop
    
    End Sub
    Folgendes Problem gibt es:

    LED geht AN und dann passiert nichts mehr

    Kommentiere ich die Funktionsaufrufe aus, so blinkt die LED brav, wie sie es auch tun sollte.

    Nun meine Fragen:

    1. MUSS ich die I2C pins im Code definieren

    ala:

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


    2. Sollte das SD21 die Servos bei neustart nicht automatisch in Mittelstellung bringen

    3. Der Compiler meldet keine Fehler, im Funktionskopf sind z.b. "byval" nicht ganz korrekt geschrieben (Groß/Klein-Schreibung), könnte es daran liegen

    4. Muss ich den ISP-Programmer vom Board abziehen o_O

    Bin für jede Antwort dankbar

    mfg plusminus

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2007
    Beiträge
    210
    eine definizion der I2C ist immer besser als sich auf die einstellungen von Bascom zu verlassen

    die mittelstellung der Servos sollte im programm bei der pulserzeugung vorrdefiniert sein

    oder die letzten werte der servostellungen aus dem eeprom auslesen und setzen
    befor timer on gesetzt wird

    ISP Programmer bei mir STK200dongel kann ohne probleme aufgesteckt bleiben es sei denn die ports werden verwendet
    wegen den pullups der scl sda besser wenn getrennt

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    36
    Beiträge
    478
    Ok, es lag an den nicht definierten Ports

    FOlgendes hat noch gefehlt (vor i2cinit):

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

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    36
    Beiträge
    478
    Soweit hats nun funktioniert, nur dass sehr sporadisch positionen nicht ausgeführt wurden.
    An was könnte das denn liegen

    Brauch ich noch die Pullups von SDA/SCL nach Vcc ? hab mal gemessen, an den Pins liegen immer 5V an, so solls doch sein, oder

    Im Schaltplan des RNMEga2560-Boards findet sich kein solche Widerstand... (ist also beim SD21 einer druff ???)

  5. #5
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Ja, wenn dein Servo Board keine Pullup Widerstände hat, dann musst du die noch anschließen.

    Beim RN-MEga2560Board sind die nicht standardmäßig vorgesehen um das Modul in den Anwendungsmöglichkeiten nicht zu begrenzen. Es könnte ja sein das ein Slave Board die Widerstände besitzt oder das das Modul selbst als Slave eingesetzt werden soll oder aber das die I2C Ports für ganz andere Aufgaben genutzt werden.

    Also checken ob beim Servoboard welche drauf sind, sollte eigentlich in der Doku vom Servoboard stehen.

    Gruß Frank

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    36
    Beiträge
    478
    Deuten die gemessenen 5V nicht darauf hin, dass da auf den SD21 schon welche drauf sind ?

    Man kann es ja auch direkt mit nem Controller drauf ansteuern. Und da noch selbst die Widerstände ranlöten wäre ein bisschen komisch...

    Mal auf die Suche nach dem Schaltplan machen, gar nicht so einfach, im "Datenblatt" steht mal wieder nxi drin...

    Edit: Sollte man (wenn ich noch muss) die Widerstände nahe beim Master (2560-Board) Einlöten ?

  7. #7
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Nun die 5V deuten schon darauf hin, aber besser wäre wenn man´s genau weiss. Leide rsteht beim SD21 nix dabei und Schaltplan gibts da wohl nicht. Es sieht abe rso aus als seien Widerstände da, wenn man sich die Platine anschaut.

    Im Notfall, wenn Du ganz sicher sein willst, dann nimm einfach noch zwei 22k Widerstände und lege die jeweils von +5V auf SDA und einmal auf SCL. Die schaden nix, egal ob die nun schon da sind oder nicht. Wo du die hin lötest spielt überhaupt keine Rolle, ich würde sie irgendwo beim Servoboard unterbringen oder auf die Platine auf die du RN-Mega2560 steckst.

    Wenns dann noch nicht klappt, liegts am Programm.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    36
    Beiträge
    478
    So, hier noch 2 videos von meinem Problemchen...
    Ziemlich zufällig bewegen sich einzelne Beine einfach nicht mit...
    (Es sollten sich alle Beine bewegen, wenn das RN-2560-Board rot blinkt)

    1.Video mit angeschlossenem ISP-Kabel
    http://www.alekto-programming.com/im...firstmovie.wmv

    2.Video mit abgetrenntem ISP-Kabel
    http://www.alekto-programming.com/im...econdmovie.wmv

    Habs eben nochmal ohne ISP-Kabel probiert und es funktioniert wieder ohne Fehler...

    Edit: Und nochmal probiert... keine Fehler... *strange*

    [schild=8 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Kann das wirklich am ISP-Kabel liegen ???[/schild]

Berechtigungen

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

Labornetzteil AliExpress