Forum: Mikrocontroller und Digitale Elektronik UART Problem mit Bascom


von Marcel (Gast)


Lesenswert?

Hallo,

ich habe ein ATMega8535. An die serielle Schnittstelle (Rxd) soll nun
ein Modul welches ein Signal mit 300bps, 7 Datenbits, 2 Stoppbits und 1
geradem Paritätsbit aussendet. Und zwar 15 Bytes und anschließend ein
CR. Nun soll ein String 15 Bytes groß die Daten aufnehmen und bei jeder
neuen Übertragung aktualisiert werden. Zur Kontrolle hab ich ne
Verbindung zum PC wo der String hingesendet wird. Aber da kommt nix an.
Hardware müsste eigentlich stimmen. Hab sie nicht nur einmal
kontrolliert.

Achso wenn der µC ständig einen Text ausgeben soll (im Programm
festgelegt) klappt das wunderbar.

Kann mir jemand helfen. Ich hab das jetzt in Bascom probiert, da ich
eigentlich nur Basic kann.

von harry (Gast)


Lesenswert?

wie ist das nu, soll der avr senden oder empfangen?
wenn ich's recht verstanden hab, sendet das modul und der avr
lauscht.
... aber da kommt nix an... (am PC?, der 'mithört')
stellt sich die frage, sendet das modul überhaupt?
der pin RX ist der empfänger (receive) der TX der sender (transmitter)
wer soll denn nu was machen?
weil, funzen tut die serielle schnittstelle problemlos.
noch was, ticken die auf ttl-pegel oder hast du 'nen
schnittstellenbaustein dazwischen, sowas wie max232?
die avr-schnittstelle arbeitet nämlich invertiert, vielleicht liegt ja
hier der hund begraben.

fröhliches arbeiten noch, gruss, harry

von Marcel (Gast)


Lesenswert?

Also soweit hast du das schon verstanden.
So hab ichs jetzt aufgebaut

 ______      ___      ____________       ________      ___
|       |    |   |    |            |     |        |    |    |
| Modul | -> | 1 | -> | ATMEGA8535 | -> O| MAX232 | -> | PC |
|_______|    |___|    |____________|     |________|    |____|


So das is das Datenblatt von dem DCF-Modul:
http://www.hkw-elektronik.de/pdf/fmd01001_sd.pdf

Der PC soll später wieder ab. Das Modul sendet auch.
Hab ich mal direkt an MAX232 gehängt und dann stimmt
auf dem Bildschirm alles.

Mein Problem ist eigentlich das im Bascom das SoftwareUART
nix annimmt. Andere Sachen wie im Tutorial hier (www.rowalt.de) gehen
auch alle.

von anfänger (Gast)


Lesenswert?

ähm...programmcode posten???

von harry (Gast)


Lesenswert?

naja, vor'm pc hängt ja auch der max232, der invertiert das signal und
bietet's allem weitern 'mundgerecht' an. wenn das modul serielle
daten ausgibt (und die nicht invertiert) kriegt sie der avr falsch -
musste invertieren, am einfachsten mit bc546. wenn das modul die daten
invertiert ausgibt und der avr invertiert empfangen kann (kanner), dann
ist der code nicht richtig. haste mal vom pc daten an den avr
geschickt? kann der avr vom pc empfangen? mal versuchen.

nettes stricken noch, gruss, harry

von Marcel (Gast)


Lesenswert?

Das Problem ist nur mit dem der onrxd Routine klappt das mit PC zum µC
und zurück. Mit dem SotwareUART oder HardwareUART Programm von Bascom
klappt garnix.

Ich denk immernoch das es ein Softwareproblem ist. Vom Modul konnte er
mit der onrxd Routine nix vernünftiges empfangen, da das Modul so
kommische Übertragungswerte hat (7 Datenbits, 1 Pariätsbit und 2
Stoppbits). Ich weiß aber nicht wie ich das im µC ändern kann.

von anfänger (Gast)


Lesenswert?

wenn du sogar selber denkst, dass es ein softwareproblem ist, warum
postest du dann nicht endlich mal den programmcode???

von Marcel (Gast)


Lesenswert?

Hast ja recht...
Also der hier geht wenn ich vom PC aus sende
Ich schätze mal das das Modul nicht geht weil die
zwei Stoppbits nich eingetragen sind.
Ich weiß auch nich wie
-----------------------------------------------------------------
$Regfile  = "m8535".dat 'ATMEGA8535-Deklarationen
$Crystal  = 1000000     'Quarz: 3.6864 MHz
$Baudrate = 300        'Baudrate der UART: 9600 Baud

Dim i As Byte

Do
  If USR.RXC = 1 Then  'Wenn Byte empfangen...
    i = UDR            'Byte aus UART auslesen
      Print i
Loop
End
-----------------------------------------------------------------

Und diese Quellcodes sind die Originalcodes von Bascom. Und die gehen
überhaupt nicht. Auch nicht Rechner -> µC.

Harware UART
-----------------------------------------------------------------
$crystal = 1000000
$baud = 300

'first compile and run this program with the line below remarked
Config Serialin = Buffered , Size = 20


'dim a variable
Dim Name As String * 16

'the enabling of interrupts is not needed for the normal serial mode
'So the line below must be remarked to for the first test
Enable Interrupts
Print "Start"
Do
   'get a char from the UART
   Name = Inkey()

   If Err = 0 Then                                          'was there
a char?
      Print Name                                            'print it
   End If

   Wait 1                                                   'wait 1
second
Loop
------------------------------------------------------------------

Und das Software UART
------------------------------------------------------------------
$crystal = 1000000

'tell the compiler which chip we use
$regfile = "m8535.dat"

'some variables we will use
Dim S As String * 10
Dim Mybaud As Long
'when you pass the baud rate with a variable, make sure you dimesion
it as a LONG

Mybaud = 300
Do
  'first get some data
  Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 2
  'now send it
  Serout S , 0 , D , 1 , Mybaud , 0 , 8 , 2
  '                                      ^ 1 stop bit
  '                                  ^---- 8 data bits
  '                                ^------ even parity (0=N, 1 = E,
2=O)
  '                        ^-------------- baud rate
  '                  ^-------------------- pin number
  '               ^----------------------- port so PORTA.0 and PORTA.1
are used
  '           ^--------------------------- for strings pass 0
  '      ^-------------------------------- variable
'  Wait 1
Loop
End
---------------------------------------------------------------------
So ich hoffe das ihr mir jetzt vielleicht weiterhelfen könnt.

Ich dank euch schonmal für eure Hilfe

von Bernd Schmidt (Gast)


Lesenswert?

Zumindest der Software UART sollte funktionieren wenn die Parameter
richtig eingestellt sind.

>>300bps, 7 Datenbits, 2 Stoppbits und 1
>>geradem Paritätsbit aussendet

Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 2 ist definitiv nicht richtig.

Parität, Anzahl Stoppbits und Anzahl Datenbits stimmen nicht.

Für den Hardware-Uart werden wohl einige Bits in den Steuerregister
manuell engestellt wer´den müssen (steht im Datenblatt).

Gruss
Bernd

von Marcel (Gast)


Lesenswert?

Warum nicht ich kann doch das Paritätsbit mit als Datenbit verkaufen.

Habs nochmal probiert. Funzt auch nicht.

von Bernd Schmidt (Gast)


Lesenswert?

Im Prinzip ist das Paritybit auch nur ein Datenbit.

Wenn ich das Modul richtig verstehe sendet es nur Daten auf
Anforderung. Enweder durch Befehl (irgendwas und CR) oder durch Pegel
auf der RXD-Leitung am Modul.


Bernd

von Marcel (Gast)


Lesenswert?

Das sendet. Steht unter vereinfachtem Datenaustausch im Datenblatt
(siehe Link). Ich hab die Rs232 in Leitung nämlich auf GND gezogen. Das
sendet sieht man auch mit nem Oszi.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.