PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SD21 mit RN Mega2560 - I2C -Probs



plusminus
25.02.2007, 23:17
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.




'################################################# ##
'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

magic33
26.02.2007, 10:00
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

plusminus
26.02.2007, 10:44
Ok, es lag an den nicht definierten Ports :!:

FOlgendes hat noch gefehlt (vor i2cinit):


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

plusminus
01.03.2007, 09:29
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 ???)

Frank
01.03.2007, 09:45
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

plusminus
01.03.2007, 09:50
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 ?

Frank
01.03.2007, 11:04
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.

plusminus
06.03.2007, 20:57
So, hier noch 2 videos von meinem Problemchen...
Ziemlich zufällig bewegen sich einzelne Beine einfach nicht mit... :-k
(Es sollten sich alle Beine bewegen, wenn das RN-2560-Board rot blinkt)

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

2.Video mit abgetrenntem ISP-Kabel
http://www.alekto-programming.com/images/hexapod/tutorial/secondmovie.wmv

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

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

Kann das wirklich am ISP-Kabel liegen ???