PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Controll Mega 32 / RS232 [Ich bin anfänger]



Naturp
28.01.2010, 20:47
Schönen Abend zusammen.
Ich hoffe, dass ich dieses Thema am richtigen Ort erstellt habe!

Ich habe mir eine C-Controll Pro Unit Mega 23 gekauft!
Hier der Link:
http://www.conrad.ch/goto.php?artikel=198206

Nun zu meinem Problem

Ich möchte über RS 232 4 Bytes ausgeben

Immer zuerst #s und dann 2 Variabeln..

Leider ist in der Hilfe (vom IDE) nur eine Beispiel Ausgabe in C..
Von C verstehe ich nun leider mal noch weniger als von BASIC

Daher die Frage, kann mir jemand einen funktionierenden CODE in BASIC draus mach??



void main(void)

{

int i;

char str[10];



str="test";

i=0;

// Initialisiere Schnittstelle mit 19200baud, 8 Bit, 1 Stop Bit, keine Parität

Serial_Init(0,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD1920 0);



while(str[i]) Serial_Write(0,str[i++]); // Gib den String aus

}


Ich habe es einmal so Probiert:


Sub ServosdirectMove(Servonumber As Byte, Servopos As Byte)



Dim i As Integer
Dim Str1 (5) As Char

Str1= "#s" : Servonumber : Servopos
i=0

Serial_Init(0,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD9600)

Do While
'und da habe ich keine Ahnung wie machen

End While





End Sub
Ich benötige das übrigens für einen
http://www.shop.robotikhardware.de/shop/catalog/product_info.php?products_id=23

Hoffe, mir kann jemand weiter helfen..
Danke für eure AW schon im voraus

Naturp
28.01.2010, 22:16
Hallo nochma

Sind diese Zeillen bei allen "Dialekten" gleich oder braucht man die, um es sauber ins Basic übersetzen zu können??

Syntax

void Serial_Write(byte serport, byte val);

Sub Serial_Write(serport As Byte, val As Byte)

Naturp
30.01.2010, 18:07
Hallo
Was ist an meiner Frage denn Falsch??

Ein bisschen programmiererfahrung (ActionScript, S5,) habe ich schon..

Aber da blicke ich echt nicht durch...diesen String geht einfach nicht so, wie ich will...(ne möchte)

Kann mir keiner weiter helfen??

Bitte um ehrliche AW

Dirk
30.01.2010, 19:14
Hallo Naturp,

schau dir doch bei Robotikhardware auf der von dir verlinkten Seite 'mal das Basic Beispiel an (unter dem Link "Doku mit Bascom Beispiel").

Name: servotreibertestrns1.bas

Das ist zwar Bascom, läßt sich aber gut nach CCBASIC übersetzen.

Gruß Dirk

Naturp
30.01.2010, 20:02
Hallo Naturp,

schau dir doch bei Robotikhardware auf der von dir verlinkten Seite 'mal das Basic Beispiel an (unter dem Link "Doku mit Bascom Beispiel").

Name: servotreibertestrns1.bas

Das ist zwar Bascom, läßt sich aber gut nach CCBASIC übersetzen.

Gruß Dirk

Nun, ich will zwar nicht unhöflich sein, aber auf diese Jdee kam ich auch schon..

Aber da hab eich schnell mal Probleme:

1.) Mit was öffne ich die Datei ..

2.) Im PDF steht was von "byval" wath is dens das??

3.) Die initialisierungn
Ich weiss:
-9600 Baud..

Ich weiss nicht:
-Wie viel stop Bit
-Wie viel Bit
-Was für ein Parity

lange habe ich gehoft, einfach alles durchprobieren währe die lösung..
nach dem 20 Versuch habe ich aber aufgegeben

Im beispiel steht:

Print "#s" ; Chr(servonummer) ; Chr(position)

Und warum funktioniert das so nicht:
Serial_WriteText(0,"#s" ; Servonumber ; Servopos)


Nach über 5 Stunden nur an dieser Komunikation ausprobieren und noch immer keine Ahnung wie ich es lösen könnte schwindet meine Geduld immer mehr..

Sobald ich den String ausgebe, kriege ich auf dem Osziloskop ein total verhaktes Signal...

Hoffe, jemand kann mir weiterhelfen..

Dirk
30.01.2010, 20:38
Hallo Naturp,


Nun, ich will zwar nicht unhöflich sein, aber auf diese Jdee kam ich auch schon..
Du bist sehr höflich, hattest aber auch nicht erwähnt, dass du das Basic Beispiel kennst, sondern - im Gegenteil - offenbar ausgehend von C eine Umsetzung in Basic versucht.

Zu 1) Die .bas Datei kannst du mit dem Windows-Editor öffnen.
Zu 2) Erstmal egal. Nimm am besten am Anfang keine Sub, sondern sende den String im Hauptprogramm, um zu testen, ob überhaupt ein Servo reagiert.
Zu 3) Empfehlung: Klammer dich erstmal nicht an die Initialisierung, sondern an den Rest des Programms. Dann suchst du in der CCBASIC Anleitung den Serial_init Befehl und stellst ihn auf 9600 Baud, 8 Datenbits, keine Parität und 1 Stopbit ein.


Sobald ich den String ausgebe, kriege ich auf dem Osziloskop ein total verhaktes Signal...
Das wäre auf meinem Oszi auch nicht anders, weil das eine wenig hilfreiche Methode ist, eine fehlerhafte Programmierung zu erkennen. Was willst du denn da erkennen?

Gruß Dirk

Naturp
30.01.2010, 22:04
Zu 3) Empfehlung: Klammer dich erstmal nicht an die Initialisierung, sondern an den Rest des Programms. Dann suchst du in der CCBASIC Anleitung den Serial_init Befehl und stellst ihn auf 9600 Baud, 8 Datenbits, keine Parität und 1 Stopbit ein.


Das steht so schon in meinem ersten Beitrag....

Serial_Init(0,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD9600)

Das ist ja so weit ok..

Aber ich kann den String nicht ausgeben-Ich weiss nicht wie.....

Kann mir jemand ein Beispiel in Basic geben, wie ich -sagen wir mal- #s 1 170 über RS232 ausgeben kann...

Ich weiss nicht, wie ich das mit diesem Befehl ausgeben kann:

[Direkt aus der Hilf evom IDE kopiert]


Syntax
void Serial_Write(byte serport, byte val);
Sub Serial_Write(serport As Byte, val As Byte)
Beschreibung

Ein byte wird zur seriellen Schnittstelle geschickt.

Parameter

serport Schnittstellennummer (0 = 1.serielle, 1 = 2.serielle etc..)

val der auszugebende byte Wert


oder dann doch das?


Syntax

void Serial_WriteText(byte serport,char text[]);
Sub Serial_WriteText(serport As Byte,ByRef Text As Char)

Beschreibung


Es werden alle Zeichen des char array bis zur terminierenden Null auf der seriellen Schnittstelle ausgegeben.



Parameter
serport Schnittstellennummer (0 = 1.serielle, 1 = 2.serielle etc..)
text char array



Bitte help

Dirk
30.01.2010, 22:15
Hallo Naturp,

man kann es wie im Beispiel aus der Anleitung mit einem Textarray machen oder mit der Ausgabe einzelner Zeichen:

Serial_Write(serport, 35) ' #
Serial_Write(serport, 83) ' s
Serial_Write(serport, servo_number) ' Servonummer 1..10
Serial_Write(serport, servo_position) ' Servoposition 1..255
Serial_Write(serport, 0x0A) ' Zeilenvorschub
Klappt das?

Gruß Dirk

Naturp
30.01.2010, 23:17
Hallo Naturp,

man kann es wie im Beispiel aus der Anleitung mit einem Textarray machen oder mit der Ausgabe einzelner Zeichen:

Serial_Write(serport, 35) ' #
Serial_Write(serport, 83) ' s
Serial_Write(serport, servo_number) ' Servonummer 1..10
Serial_Write(serport, servo_position) ' Servoposition 1..255
Serial_Write(serport, 0x0A) ' Zeilenvorschub
Klappt das?

Gruß Dirk

So habe ich es schon mal probiert... ](*,)
allerdings ohne Zeilen Vorschub.. :-k

Nun, es geht nicht..aber ich hab eglaub eine idee woran es liegen könnte..

Das Servo zuckt zwischen durch, und immer wenn es das macht, wups sind die LED für einen Augenblick abwesend!

Ich stelle mir das so vor:
Das Programm startet, läst das Servo laufen, und dann (gerade wegen dem Servo) bricht die Spannung ein..!

Morgen programmier ich das ganze mal so um, dass ich ein LED einschalte, es dann wieder ausschalte, und dann das Servo bewege!

Sollte wirklich die Spannung zusammenbrechen, so wird das LED beim "neustart" wieder leuchten...

Ich warte erstma ab, bis das Netzteil, das ich bestellt habe da ist, dann guke ich weiter!

Danke für die Geduldigen AWs

Naturp
01.02.2010, 17:05
Hallo

Und es funktioniert..nicht!!! :-k

Ich hoffe, dass mir jemand helfen kann!

Hier nochmal die Links zu den Teilen, die ich verwenden

CC-Mega 32 bei Conrad
http://www.conrad.ch/goto.php?artikel=198206

CC-Mega 32 in eigener Schaltung

http://www.c-control-pro.de/Archiv/Mega/control-pro-pro_mega32_stand_alone.pdf

Dann den RNS1 oder eben Atmel AT90S2313
http://www.shop.robotikhardware.de/shop/catalog/product_info.php?products_id=23


Das Ganze mal in meinem Schaltplan ist unten zu finden..
Falls jemand einen Fehler sieht, bitte melden...

Kurze INFO:
Jeder, der den Schaltplan anschaut, wird mercken, dass eine Leitung von RS232 über einen Schalter geht! Das ist nur dazu da, weill ich zum Programmieren und zum betrieb die ein e Leitung eben 2mal brauche..

Sobald als möglich werde ich noch den Code in BASIC hochladen!
ICH KANN DEN FEHLER EINFACH NICHT FINDEN!!!PLEASE HELP!!

Dirk
01.02.2010, 20:24
Hallo Naturp,

bei deinem Schaltplan sehe ich nichts, was dramatisch wäre.
Kleinigkeiten:
- R6 sollte 10kOhm sein (nicht 10 Ohm)
- Mit dem Reset-Taster sollte man auch den 2313 resetten können.
- An AVCC sollte noch ein 100nF an GND, wenn man ADC braucht.

Fragen:
- Bist du sicher, dass beide uCs laufen? Wenn nein, programmier Ihnen je ein Blinklicht rein mit einer LED an einem Pin.
- Bist du sicher, dass der 2313 mit 4MHz läuft? Bei Auslieferung sind das ja nur 1 MHz.
- Teste den 2313 einzeln, indem du ihm einen String von einem anderen uC schickst, von dem du weißt, dass er funktioniert.

Gruß Dirk

Naturp
01.02.2010, 20:57
Danke für die AW



R6 sollte 10kOhm sein (nicht 10 Ohm)


äm..na ja..da habe ich wohl vergessen, ein K zu schreiben



- Mit dem Reset-Taster sollte man auch den 2313 resetten können.

ö an welchen PIN kommt der??

Dann
Frage1: Beim CC 32 ich mir (nicht) mehr sooo sicher..
Ich kann zwar das Programm rüberschreiben und auch die (korekte) Hardeware Version des uCs kriege ich angezeigt..aber vorhin wollte ich ein Relay ansteuern, aber das zog nicht an und ich konnte auch keine Spannung am PIN messen..
Ich hatte ihn (den uCs ) auch mal falsch angeschlossen, weil ich einen falschen Schaltplan erwischt habe ](*,)
Da die Komunikation mit dem PC dann aber (mit dem richtigen Plan) funktionierte machte ich mir keine Sorgen..

Frege2: tja ..also im dokument von Robotikhardeware sind doch 4mhz angegeben??..kann ich leider nicht ausprobieren, da ich gerade kein 1mhz Quarz habe..

Frage3: Habe gerade keinen anderen Controller (ausser der im ProBot aber denn will ich nicht missbrauchen)
Ich wolltet mir letzten Freitag eigentlich einen Pegelverstärcker kauffen, um den 2313 am PC anzuhängen..leider habe ich das dann vergessen.

Ich nehm mir nochmal das Programm vor, dann schaue ich weiter!

Danke für die Vorschläge, ich setze mich gleich an den PC und an die Platine..

Dirk
01.02.2010, 21:04
ö an welchen PIN kommt der??
An den Reset-Pin


tja ..also im dokument von Robotikhardeware sind doch 4mhz angegeben??
Ups, sorry. Ich dachte, du hättest einen blanken 2313 gekauft, aber das ist ja wohl der programmierte von RobotikHardware. Der müßte schon auf 4 MHz laufen, wenn der Quarz auf deiner Platine 4 MHz ist.

Viel Erfolg!

Dirk

Naturp
01.02.2010, 21:18
ö an welchen PIN kommt der??
An den Reset-Pin

Viel Erfolg!

Dirk

Am Rest PIN ist doch schon der 10k Wiederstand??

Danke, das kann ich gebrauchen!!
Das mit dem Relay das nicht ging hat sich erledigt..oder fast..
Ich habe das Relay umgelötet auf PIN 40 und auch so angesteuert...
Auf PIN 26 ging es nicht, obwohl eigentlich -so weit ich sehen kann- alles richtig gewesen währe..
Pin 26 gehört glaub ich auch zu diesen, die ich FALSCH angeschlossen hatte..
kann es sein, dass durch diese Fehlschaltung dieser Anschluss kapput ging??

Danke nochmal für die guten AW