Datenübertragung zwischen C-Control M-Unit und Atmega 8

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 25 11 2024  10:23:47      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
Datenübertragung zwischen C-Control M-Unit und Atmega 8
Suche nach: atmega (404)

    







BID = 473357

tvgucker

Gelegenheitsposter



Beiträge: 54
 

  


Hallo !
Ich habe da mal eine Frage zur Datenübertragung über die UART Schnittstelle zwischen einer C-Control M-Unit und einem Atmega 8.
Auf der M-Unit läuft ein kleines Testprogramm das einfach eine Variable von 10 bis 50 hochzählt. Diese Zahl möchte ich über den TXD Pin auf einen Atmega 8 übertragen. Auf dem Atmega 8 läuft ein kleines Programm um die empfangene Zahl auf einem Display anzeigen zu können. Irgenwie kommen da aber nur falsche Zahlen an.
Ich habe schon alles versucht, auch das Timing habe ich schon auf beiden Prozessoren hin und her geschaltet aber nichts hat geklappt.
Wäre schön wenn mir jemand weiter helfen könnte.
Ich hänge mal beide Programme mit an.
Wie gesagt die Hardware ist sehr einfach aufgebaut. Der TXD Pin von der M-Unit hängt direkt an Pin PD0(RXD) am Atmega. Und wie gesagt es wird ja auch irgendwas übertragen. Am Display sehe ich zuerst die Zahl 146 und dann irgendwelche 3 stelligen Zahlen.

Gruss, tvgucker

BID = 473409

bastler16

Schreibmaschine

Beiträge: 2140
Wohnort: Frankreich

 

  

Zu den Quellcodes kann ich nichts sagen, verstehe weder Bascom noch "C-Control-Sprache".
Ist die Baudrate richtig eingestellt? Stimmen die sonstigen Einstellungen (Stop-Bit und Co.)? Immer erst den Empfänger aktivieren, dann den Sender. Sonst gibt es Synchronisationsprobleme, hatte das mal zwischen Mega8 und PC.

EDIT: Läuft der mega8 wirklich mit 4MHz wie im Quelltext angegeben? Keine Ahnung ob Bascom mit dieser Angabe irgendwas wichtiges berechnet...

[ Diese Nachricht wurde geändert von: bastler16 am 18 Nov 2007 16:30 ]

BID = 473636

tvgucker

Gelegenheitsposter



Beiträge: 54

Hallo bastler16 !

Das zuerst der Empfänger und dann der Sender eingeschaltet werden muss habe ich gerade mal ausprobiert, hab leider auch nichts gebracht.
Der Atmega läuft auf 4 Mhz, ist in den Fuse Bits richtig eingestellt.
Auch stimmt die Baudrate, beide laufen auf 9600 Baud.
Was ich nicht genau weiß ist ob der C-Control auch mit 8,N,1 läuft oder ob das da ein anderes Protokoll ist.
Ich habe sowas schonmal für ein anderes Projekt gemacht zwischen 2 Atmegas, da läuft das bestens.

Gruss, tvgucker

BID = 473744

bastler16

Schreibmaschine

Beiträge: 2140
Wohnort: Frankreich

Tja...
Hast du einen Link zur C-Control? Es scheint davon verschiedene zu geben .


Zitat :
Was ich nicht genau weiß ist ob der C-Control auch mit 8,N,1 läuft oder ob das da ein anderes Protokoll ist.

Das solltest du rausfinden.

Mit einem Speicheroszi oder ähnlichem könnte man die Daten mitschneiden und kontrollieren, die Dinger sind aber teuer.

Eventuell kannst du die C-Control mit dem PC verbinden, so ließe sich auch kontrollieren ob 8N1 eingestellt ist.

Viel Erfolg und melde dich wenns was Neues gibt!

BID = 473971

tvgucker

Gelegenheitsposter



Beiträge: 54

Hallo Bastler16 !

Also das Teil heisst C-Control M-Unit und hat die Conrad Nummer:
Artikel-Nr.: 950556 - 62
Auf der Conrad Seite findest du auch eine Anleitung zu diesem Teil.
Aber leider lassen die sich nicht dazu aus was die M-Unit für eine Sprache spricht
Ich werde mal schauen ob ich mir ein Ozzi besorgen kann um da mal was messen zu können.

Gruss, tvgucker

BID = 474063

PhyMaLehrer

Schriftsteller



Beiträge: 911
Wohnort: Leipzig

Auf Seite 46 der Anleitung steht etwas über die Einstellung der Baudrate und am Anfang der Seite 48 ist der Hinweis versteckt:
Die weiteren Schnittstellenparameter - 8 Datenbits, kein Paritätsbit, 1 Stopbit - sind fest und können nicht geändert werden.

Hilft das ein bißchen?

BID = 474160

bastler16

Schreibmaschine

Beiträge: 2140
Wohnort: Frankreich


Zitat :
Ich werde mal schauen ob ich mir ein Ozzi besorgen kann um da mal was messen zu können.

Das müsste dann aber ein (sehr) gutes und damit teures Gerät sein. Mit einem 0815-Oszilloskop wirst du nicht viel erkennen, die Signale sind "zu schnell".

Danke für die C-Nummer.

Ich würde versuchen die C-Control mit dem PC zu verbinden und erstmal so zu testen ob das Ding vernünftige Daten liefert. Dann sehen wir weiter.

BID = 474287

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein


Zitat :
bastler16 hat am 20 Nov 2007 21:09 geschrieben :


Zitat :
Ich werde mal schauen ob ich mir ein Ozzi besorgen kann um da mal was messen zu können.

Das müsste dann aber ein (sehr) gutes und damit teures Gerät sein. Mit einem 0815-Oszilloskop wirst du nicht viel erkennen, die Signale sind "zu schnell".

Ich hab' schon mal mit einem Game-Boy Oszi das Protokoll einer ser. Verbindung herausbekommen. - Im single - Trigger Mode hat's relativ gut geklappt...
Ist zwar nur ein Schätzeisen - also die genaue Baud-rate kannst Du aus der "Messung" nicht ablesen, aber wenn Du einen intelligenten Wert sendest (ständiger Wechsel zwischen den Bits, z.B. 0x55) kannst Du recht gut auf das Protokoll schliessen.
Überprüft hab' ich das mit Messungen an bekannten Schnittstellen.
(Ist aber alles schon eine ganze Weile her....)



[ Diese Nachricht wurde geändert von: hajos118 am 21 Nov 2007  7:33 ]

BID = 474319

tvgucker

Gelegenheitsposter



Beiträge: 54

Hallo !

Jau, hatte ich in der Anleitung ganz übersehen.
Wenn die M-Unit tatsächlich 8, N , 1 sendet sollte es ja stumpf funzen

Aber wie gesagt es tut nicht.
Ich habe auch schon probiert im C-Control Programm noch mal eine
put 0 vorweg zu schreiben weil es da einen Bug geben soll, hat aber leider auch nicht geholfen.

Gruss, tvfreak

BID = 474551

Jornbyte

Moderator



Beiträge: 7178

Ist die Verbindung richtig (RxD->TxD, TxD->RxD) vekabelt?
Ist Handshake an der C-Controll vorgesehen, wenn ja muss da noch im Atmel implementiert oder mittels Drahtbrücken vorgetäucht werden.

_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 474722

QuirinO

Schreibmaschine



Beiträge: 2205
Wohnort: Behringersdorf
Zur Homepage von QuirinO ICQ Status  

Die M-unit hat

RS232 Interface 9600,8,1,n kein Handshake, TTL Pegel

(quelle http://www.malo-web.de/index.shtml?munit )

Er hat die einfachst mögliche Hardware aufgebaut:

"die Hardware ist sehr einfach aufgebaut. Der TXD Pin von der M-Unit hängt direkt an Pin PD0(RXD) am Atmega"

Irgendwie drehn wir uns im Kreis.

Ich tippe auf einen Softwarefehler

Ich guck mir die Programme mal an.


[ Diese Nachricht wurde geändert von: QuirinO am 22 Nov 2007 14:21 ]

BID = 474737

QuirinO

Schreibmaschine



Beiträge: 2205
Wohnort: Behringersdorf
Zur Homepage von QuirinO ICQ Status  

Also ich hab zwar auch nie bascom programmiert, aber ich hab ne c-control hier rumliegen, die Staub ansetzt ^^
Ich hab jetz beim Einlesen in die Materie also einen ähnlich unbefangenen Blick auf die Dinge wie tvgucker.

Als allererstes möchte ich dich auf die seite
http://avrhelp.mcselec.com/bascom-avr.html
verweisen, falls du die noch nicht kennst.


Beim sende Programm scheint mir so weit alles in Ordnung zu sein,

Beim Programm das die Daten auf dem LCD anzeigt ist mir Spontan folgendes ins Auge gesprungen.

Du Definierst die Eingabevariable A als "String", Benutzt jedoch zum Lesen vom Port das commando "Inputbin", Das liest so viele Bytes wie es braucht vom Port, In dem Fall meines Erachtens nach die Länge des Strings, die bei deiner Definition Aber 0 ist.
Ich würde da auf jeden Fall als erstes mal den Datentyp der Variable auf Byte ändern, weil du dann sicher sein kannst, dass er nur versucht 1 Byte vom Port zu lesen.

Gibt es eigentlich einen bestimmten Grund warum du "inputbin" benutzt und nicht "Input" ? Meines Erachtens nach ist Inputbin Ein Befehl um Einzelne Bits oder Bitfolgen von einem Stream zu lesen.

Das nächste was mir auffällt ist dass du für die Variable einmal Gross A und einmal Klein a benutzt. Ob das was ausmacht Weiss ich jetzt nicht, ich würde es auf jeden fall ausbessern.

Dass als allererstes 146 auf deinem Display erscheint Liegt wahrscheinlich daran, dass du die Variable zwar deklarierst, sie aber leerlässt. Das Display zeigt dann den Wert der Speicherzelle an in der die Variable abgelegt werden soll. Dieser kann bei jedem Reset des Prozessors einen Zufälligen Wert annehmen, Bei dir ist das dann evtl bevorzugterweise die 146.

Was mir dann noch komisch vorkommt ist dass du Den Befehl "Binval" benutzt. Dieser wandelt einen String der nur aus Nullen und Einsen besteht in die äquivalente Zahl um.
Stell dir vor du würdest am Pc Bildschirm auf in der Eingabeaufforderung den String "0011" eingeben Würde daraus mit diesem befehl das Byte 3.
Dir wird hier keine Fehlermeldung ausgegeben weil deine Variable als String definiert ist, du liest aber ein Byte vom Port. Das müsste eigentlich einen Fehler verursachen, zumindest würde ein Basic Debugger zur laufzeit eine Fehlermeldung schmeissen, dein AVR hat dazu aber keine Möglichkeit und macht einfach mit dem binäräquivalent des Strings weiter.
Ich denke dieser Befehl ist ein sehr guter Kandidat für den Fehler.

Der Befehl "LCD" erwartet als Variable einen String, mit Binval" übergibst du ihm hier aber ein Byte. Ich weiss nicht wie Er dann damit verfährt, aber du sagst es werden 3-stellige Zahlen ausgegeben. Wenn diese in jedem fall kleiner als 255 sind, dann ist davon auszugehen dass er Bytes einfach in das Char äquivalent umwandelt.

Du Wandelst hier Die daten vom Port zuerst von einem Byte In einen String (Inputbin A, A als String Definiert, und dann vom String in ein Byte ("Binval(a)"), wobei ein Fehler auftritt. Das übergibst du dann dem Befehl "LCD" Das das Byte wieder in einen String der Länge 3 umwandelt und ans LCD sendet.


Versuch doch einfach mal Deine Variable als Byte zu definieren, Denn das ist es ja schliesslich was du empfängst. Dieser Variable weist du der vollständigkeithalber sofort den Wert 0 zu.

Dieses Byte Übergibst du jetzt einfach mal Probehalber dem LCD- Befehl

Denn so weit wir gesehen haben wandelt dieser ein Byte wohl in einen 3-stelligen String um, Sonst würde er statt 3-stelligen Zahlen, die er ja anzeigt, irgendwelche wilden Zeichen ausgeben, nämlich genau das ASCII- äquivalent des Bytes, das "binval" erzeugt.



Wenn jemandem der anderen Helfer bei meinen geistigen Ergüssen, die grösstenteils aus vermutungen oder Schnell überflogenen befehlsbeschreibungen auf http://avrhelp.mcselec.com/bascom-avr.html
resultieren, noch was auffällt oder gar sauer aufstößt, stutzt mich bitte zurecht.

Hoffe irgendwie nen Stoss in die richtige richtung gebracht zu haben.

MFG QUirin




BID = 474756

cholertinu

Inventar



Beiträge: 3755
Wohnort: CH


Zitat :
bastler16 hat am 20 Nov 2007 21:09 geschrieben :

Ich würde versuchen die C-Control mit dem PC zu verbinden und erstmal so zu testen ob das Ding vernünftige Daten liefert.

Genau. Dann wissen wir schon mal, ob die Sendeseite korrekt arbeitet. Und du weisst dann auch, wo Tx und Rx sind

Spasseshalber kannst du dann ja auch vom PC aus die Empfangsseite bedienen, falls du kein Software Handshaking oder so einsetzt.

BID = 475067

tvgucker

Gelegenheitsposter



Beiträge: 54

Hallo !
Jetzt kommt ja Schwung in die Sache.
Ich fange mal von hinten an.
cholertinu

Das habe ich genau so gemacht. Als ich dann im Programm den Befehl PUT durch PRINT ersetzt habe wurden im Terminalprogramm genau die richtigen Werte angezeigt.
Also scheint die C-Control Seite soweit in Ordnung.

Gruss, tvgucker



BID = 475076

tvgucker

Gelegenheitsposter



Beiträge: 54

Hallo QuirinO !

Das die Variable A mal GROSS und dann wieder klein dargestellt wird liegt an Bascom. Wenn ich das ändere wird das gleich wieder zurück geschrieben.
Was ich vergessen habe zu schreiben ist das vor der 146 noch einen 0 angezeigt wird.
Wenn ich das Programm so ändere wie du das geschrieben hast also A als BYTE definieren und a sofort zu 0 setze und INPUTBIN durch INPUT ersetze dann wird auf dem Display gar nichts mehr angezeigt. Das kann ja nur bedeuten das das Programm beim Befehl Input hängen bleibt.

Gruss, tvgucker


      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 6 Beiträge verfasst
© x sparkkelsputz        Besucher : 182394454   Heute : 1650    Gestern : 7548    Online : 795        25.11.2024    10:23
4 Besucher in den letzten 60 Sekunden        alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0422689914703