Serieller Empfänger mit AVR + BASCOM Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
| Autor |
Serieller Empfänger mit AVR + BASCOM Suche nach: empfänger (4546) |
|
|
|
|
BID = 68771
Jornbyte Moderator
      
Beiträge: 7336
|
|
Die Schaltung ist für den Bidirektionalen Betrieb ausgelegt. Also Daten empfangen und senden (an den PC). Den rest habe ich nicht (noch nicht) gelesen
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten. |
|
BID = 69157
Majuz Neu hier

Beiträge: 24
|
|
Hallo
ich habe jetzt mal ein programm geschrieben das eine Zahl über RS232 empfangen soll und dann auf einem LCD anzeigen.
es funktioniert soweit auch, nur zeigt er eine andere zahl an als ich übergebe.
wenn ich "1" übergebe zeigt er z.b. 192 an. eigentlich zeigt er bei allen zahlen etwas zwischen 192 und 196 an.
hier mal mein BASCOM-Code:
| Code : |
$regfile = "m8515.dat" 'Mega8515-Deklarationen
$crystal = 4000000
$baud = 1200 'Baudrate der UART: 9600 Baud
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , E = Portc.2 , Rs = Portc.0
Enable URXC 'Interrupt URXC einschalten
Enable Interrupts 'Interrupts global zulassen 'Interrupt-Routine setzen
On Urxc Schreiben
Dim I As Byte
Cls
Schreiben:
Cls
I = Udr
Lcd I
Return
End 'end program
|
|
Und hier mein Visual-Basic-Programm mit dem ich die Daten übermittle.
| Code : |
Dim a As Byte
Private Sub Command_send_Click()
a = Text1.Text
Call senden(a, 50) 'aufruf der unterfunktion zum senden
End Sub
Private Sub Form_Load()
MSComm1.InputMode = Binary 'Binaere Datenuebertragung
MSComm1.Settings = "1200, n, 8, 1" '1200Baud, no Parity, 8 Bits Data length, 1 Stop Bit
MSComm1.CommPort = 1 'COM1
MSComm1.PortOpen = True 'oeffnen des Ports
End Sub
Private Function senden(zahl, pause) 'unterfunktion zum senden der bytes
Dim out(2) As Byte '"as byte" muss dastehen weil sonst en fehler kommt
out(0) = 0 'erste zu übergebende zahl
out(1) = zahl 'zweite zu übergebende zahl
MSComm1.Output = out 'ausgabe der zahlen
Sleep (pause) 'pause
End Function
|
|
Ich ich verwende das MSComm - Objekt um die daten zu senden. ich weiß nicht ob der fehler am VB-programm oder am BASCOM-Programm liegt. ich hoffe ihr könnt mir helfen.
ich habe es auch schon ohne interrupts probiert (wie auf seite 1 geschrieben). kommt genau das gleiche raus.
muss ich dem µC noch sagen dass es keine parity, 8 databits und 1 stopbit sind?
einen normalen text habe ich auf dem LCD schon angezeigt und das hat einwandfrei funktioniert.
bitte helft mir!!!
Majuz |
|
BID = 69177
Midnight Stammposter
   
Beiträge: 256
|
Also bei Deinem Visual Basic kann ich Dir nicht weiter helfen..
Aber bei Deinem Bascom Programm hast Du irgendwie keine Hauptschleife drin...
Du schaltest den seriellen interrupt an, und wartest, bis der durch den Empfang ausgelöst wird, und dann springst Du in die Routine schreiben...
Daraus kommst Du mit nem Return zurück, dimensionierst i als Byte (bin mir nicht ganz sicher, aber aus der Seriellen kommt bei Bascom eigentlich ein String, und das bis zum CR)
Also solltes Du Deine Variable zumindest im Deklarationsteil oben definieren.
Dann rennt Dein Programm weiter in schreiben, und führt alles nochmal aus.
Das erreichen des jetzigen Returns sollte eigentlich ein riesen Problemdarstellen, denn eigentlich müßte er stehenbleiben, weil er nicht weiß wohin zurück.
Da Dein Programm aber scheinbar in einer Schleife läuft, springt der wohl unkontrolliert...
Du solltest i oben deklarieren, und Dein Warten in ne Schleife verpacken:
z.B.:
main:
On URXC schreiben
goto main
(Ich schau noch mal in die Doku, aber ich bin mir recht Sicher das Du aus der Seriellen ein String bekommst. Ob bei nem Interrupt nur ein Byte als String, oder aber bis zum CR (Carriege Return) da bin ich mir nicht sicher).
Normalerweise brauchst Du den Intterupt auch nicht, da Bascom bei nem INPUT eh solange wartet bis was kommt (muß dann aber mit CR abgeschlossen sein).
also z.B.:
main:
input i
lcd i
goto main
Gruß Midnight
|
BID = 69179
Majuz Neu hier

Beiträge: 24
|
danke.
werd ich morgen mal ausprobieren.
heut hab ich keinen kopf mehr dafür
Marius
|
BID = 69496
Majuz Neu hier

Beiträge: 24
|
hat leider noch nicht geklappt.
er zeigt immer 192 an.

|
BID = 69498
. Stammposter
   
Beiträge: 214 Wohnort: Auf der Alm
|
192 ist doch eine sehr schöne Zahl, was gefällt dir daran nicht ?
Zum Trost ein kleines Gedicht, leider weiß ich nicht mehr wer es verfasst hat:
M. baut einen Tischcomputer,
der, sobald er angeknipst,
stets die Null zeigt - ja das tut er,
welche Taste du auch tippst.
In dem Kreis der Sachverständ'gen aus GI*) und Industrie
ließ sich kaum die Freude bänd'gen,
- doch ein Schlager ward er nie.
*) GI = Gesellschaft für Informatik
|
BID = 69505
Majuz Neu hier

Beiträge: 24
|
das ist wirklich ein sehr produktiver beitrag.
jemand was produktiveres zu sagen????
|
BID = 69510
Midnight Stammposter
   
Beiträge: 256
|
versuch doch mal mit Hyperterminal ne serielle Direktverbindung zum Kontroller, und schau mal ob dann die Zeichen ankommen.
Wenn ja, dann liegt Dein Fehler wahrscheinlich irgendwo im VB Programm, wenn nein, dann lass mal den Simulator von Bascom laufen, ist zwar nicht der Brüller, aber zur einfachen Diagnose reicht der....
Gruß
Midnight
|
|
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 18 Beiträge im Durchschnitt pro Tag heute wurden bisher 6 Beiträge verfasst © x sparkkelsputz Besucher : 187865996 Heute : 13609 Gestern : 21855 Online : 252 21.12.2025 20:59 11 Besucher in den letzten 60 Sekunden alle 5.45 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0355439186096
|