Stránka 1 z 1

Komunikace RS232 v Bascom AVR

Napsal: 26 led 2010, 15:49
od ladislav64
Dobrý den všech,

potřeboval bych poradit s komunikací RS232. Začínám programovat v jazyce BASCOM AVR a nastal mi problém se zobrazováním na terminálu. V simulátoru vše funguje, jak má ale na terminálu zobrazení nefunguje.

přikládám jednoduchý program z heplu:

$regfile = "m8515.dat"
$baud = 19200
$crystal = 8000000

Do
Print "Hello world:"
Waitms 25
Loop

End


na terminálu se zobrazuje toto:


<88>0΀#NUL#CANĆ<Ŕ>ŕ>ţ>#NUL8ţó>8?Ŕ>Ŕ<88>0΀#NUL8ć<Ŕ>Ŕ>ţ>#NUL8ţó>8?ŕ#RSŔ<88#RS0gŔ#NUL8Ć<ŕ>Ŕ>ţ>#NUL8ţó#RS8?Ŕ>ŕ<88>0Ć€#NUL#CANĆ<Ŕ>ŕ>ţ>#NUL#CANţó>8?Ŕ>Ŕ<#CAN8>0΀#NUL8ć<Ŕ>Ŕ>ţ>#NUL8ţó>8?ŕ>Ŕ<88>0΀#NUL8Ć<ŕ>Ŕ>ţ>#NUL8ţó#RS8?Ŕ>Ŕ<88>0Î

Zkoušel jsem měnit rychlost připojení i emulaci terminálu a pořád nic. Poradíte?

Napsal: 26 led 2010, 17:47
od mtajovsky
BASCOM a jeho možnosti neznám, ale obecně se u asynchronního přenosu kromě rychlosti nastavují i další parametry:
- počet datových bitů (5/6/7/8/16)
- parita (n/e/o) - bez, sudá, lichá
- počet stop bitů (1/1,5/2)

Sedí i tohle?

Napsal: 26 led 2010, 18:34
od AB1
Kód je v pořádku.
Pro jistotu bych doplnil

Kód: Vybrat vše

$hwstack = 32
$swstack = 32
$framesize = 32

Nejčastější příčinou bývá nesprávný kmitočet oscilátoru.
Ten by měl být řízený krystalem.
Interní oscilátor může mít větší odchylku než povolené 2%.

Cestu mezi mikroprocesorem a PC zkouším tak, že vytáhnu procesor z patice a na patici propojím piny RXD TXD. Terminál pak opakuje vyslané znaky.

Napsal: 26 led 2010, 20:11
od rkozeluh
Jaký používáš převodník mezi PC a procesorem?

Jednou jsem použil nějaké snad dlouho používané zapojení s tranzistory, ale nefungovalo to, i když test na spojení Rx a TX běhal OK.
Celkem mě to dalo zabrat, než jsem na to přišel. potom jsem použil maxima a byl pokoj, no vlastně nebyl, nakonec tam stejně skončil převodník na USB.

Napsal: 27 led 2010, 16:19
od nekmil
zkus "zesynchronizovat rychlosti" $Baud a nastavení terminálu
a to Waitms 25 - není to příliš rychle ?

$regfile = "m32def.dat"
$crystal = 14745600 'krystal v Hz
$baud = 9600 'COM1:9600,N,8,1
$hwstack = 32
$swstack = 32
$framesize = 32
'-------------------------------------------------------------------------------
Dim A As Byte , B As Byte
Dim S As String * 26

Do
Wait 1
For A = 1 To 26
B = A + 64
S = S + Chr(b)
Next
Print S
S = ""
Print "Ano vytiskli jsme 26 znaků ASCII"
Print
Loop

End 'konec programu