Zaslání 4hodnot A,B,C,D přes RS232 a příjemdo Atmega8 bascom

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

Zaslání 4hodnot A,B,C,D přes RS232 a příjemdo Atmega8 bascom

#1 Příspěvek od michalino »

Dobrý den,

prosím Vás o metodologickou radu:

Jak realizovat komunikaci mezi dvěmi čipy,přičemž:

ATMEGA8 č.1
odesílá přes RS232 najednou 4 hodnoty
A,B,C,D

ATMEGA8 č.2
přijímá tyto 4 hodnoty a vypisuje na terminálu do jednoho řádku.

Otázka je, jak prosím realizovat metodologicky správně to, aby
v ATMEGA č.2 program dokázal, po výpisu čísel do řádku v terminálu v této podobě : A=2, B=3, C=45, D=5,

je vzít opět jako čísla, se kterými je možné počítat a bude vědět, že číslo 2 je A, číslo 3 je B, číslo 45 je C, číslo 5 je D?

Je jedinná možnost tyto čísla načítat postupně?

Prosím Vás o radu,
děkuji
Naposledy upravil(a) michalino dne 01 zář 2009, 09:32, celkem upraveno 1 x.
Uživatelský avatar
Zmije
Příspěvky: 1691
Registrován: 30 čer 2005, 00:00
Bydliště: Pardubický kraj

#2 Příspěvek od Zmije »

michalino píše:Dobrý den,

ATMEGA8 č.1
odesílá přes RS232 najednou 4 hodnoty
A,B,C,D

Ono jde přes RS232 odesílat data najednou? Já myslel, že přes sériové rozhraní jdou data bit po bitu pěkně zasebou, tzn. že ani hodnota A neodejde najednou, ale několik taktů to trvá.
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#3 Příspěvek od michalino »

Aha...tedy to takto nejde, děkuji...dělám v BASCOMu, tak to soudím jen dle toho, co přijde na terminál monitoru...tedy řádek číslic a jejich názvů...

takže jeden po druhém musím načíst =

čekám na znak A
pošlu znak A
znak A přijat
přijatý znak = A

čekám na znak ¨B
pošlu znak B
znak B přijat
přijatý znak=B

a další...

je to tak?
děkuji
Uživatelský avatar
Zmije
Příspěvky: 1691
Registrován: 30 čer 2005, 00:00
Bydliště: Pardubický kraj

#4 Příspěvek od Zmije »

michalino píše:...dělám v BASCOMu, tak to soudím jen dle toho...

Nj to je tipicky tmářský přístup moderních programátorů, kteří tvrdí, že učit se programovat v ASM a seznámit se s HW je v dnešní době úplný nesmysl, vždyť ve vyšších jazycích můžeme programovat platformě nezávisle, toto je potom důsledek :!:
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#5 Příspěvek od michalino »

Pane Zmije, nic netvrdím, pouze to, že nevím, jak to chodí...
A to, že dělám v bascom a ne v ASM je proto, že se ho bojím, ne proto, že si o něm myslím, že je nepoužitelný...to naopak...
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#6 Příspěvek od Chenzee »

Přesně jak píší kolegové, znak A (jako i ostatní až do F) jsou 4-bitová slova, tedy kombinace 4 bitíků za sebou. (Protože se ale bavíme o 8bitových mikrokontrolérech, je délka slova 8bitů). K tomu se musí také takto přistupovat. :wink:
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#7 Příspěvek od michalino »

Děkuji, chápu, postavím se k tomu tak...

to je ale dřina, zvlášť, když rs232 vyhazuje někdy nesmyslné hodnoty - znaky a musí se to ošetřit....
Uživatelský avatar
Bernard
Příspěvky: 3654
Registrován: 27 kvě 2005, 00:00

#8 Příspěvek od Bernard »

Bascom neznám, ale na metodologickou radu si troufnu. :)
Linka RS232 musí fungovat spolehlivě, jinak je to zbytečná dřina. Na obou koncích musí být nastavená stejná rychlost, správné napěťové úrovně, do UARTu nesmíš zapsat dřív, dokud neodvysílal předchozí znak (ale na to by Bascom měl pamatovat nějakým buffrem).
Pokud chceš s přijatým znakem později pracovat, musíš ho po příjmu uložit do nějaké proměnné, z terminálu už ho nazpět nedostaneš.
Měl by ses ujistit, že první přijatý znak je opravdu počátek té série, zvlášť když je komunikace nespolehlivá. Třeba nultým znakem STX a závěrečným EOT (viz tabulka ASCII).
Hodně štěstí!
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#9 Příspěvek od michalino »

Děkuji za podrobnou odpověď...zkusím jít krok za krokem...jeden z problémů je ten, že pokud neustále atmega posílá přes uart data, 4 čísla, pak opravdu jednou za cca 10 sekund, hlavně po změně stavu se nějaké parazitní data namísto správných čísel dostanou...to ale musím ještě vychytat, aby se to správně popsalo, každopádně Vám děkuji za námět
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#10 Příspěvek od Chenzee »

... také se může stát, že někde používáš stejný registr v nějakém jiné podprogramu (např. časové smyčce apod.) a tedy se ti hodnota sice přenese dobře, ale přepíše se na jinou. Jen co mě tak napadlo. :roll:
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#11 Příspěvek od michalino »

Tak to musím prozkoumat, děkuju...
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#12 Příspěvek od popopepe »

michalino píše:Děkuji za podrobnou odpověď...zkusím jít krok za krokem...jeden z problémů je ten, že pokud neustále atmega posílá přes uart data, 4 čísla, pak opravdu jednou za cca 10 sekund, hlavně po změně stavu se nějaké parazitní data namísto správných čísel dostanou...to ale musím ještě vychytat, aby se to správně popsalo, každopádně Vám děkuji za námět

Ahoj Michalino, koukám, že jsi koncepci propojení dvou Atmeg nedal pokoj :-)
Co posíláš jako proud dat po té RS232? Obzvláště v oblasti meteorologie? Nestačilo by ta data poslat jednou za čas? A ošetřit jejich odeslání a přijetí?
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#13 Příspěvek od michalino »

popopepe,

zdravím Vás, :) neopustilo mě to, jen si více čtu o architektuře AVR a hraju si se simulátorem bascomu. Taky si připravuju univerzální plošný spoj alias nekontaktní pájené pole, tedy plošný spoj s funkcí nekontaktního pole, abych mohl bádat....

tedy s radostí k věci:

posílám hodnoty klasickým příkaze print:

A=500
B=400
C=420
D=150

Print "Prvni hodnota-" ; A ; ".." ; "Druha hodnota-" ; B ; ".." ; "Treti hodnota-" ; C ; ".." ; "Ctvrta hodnota-" ; D

na terminálu se mi samozřejmě krásně zobrazí tyto hodnoty, které posílá atmega1 na terminál, ale pokud to pošlu do atmega2 pomocí uartu, tak potřebuju, aby atmega2 věděla, že A je tolik, B tolik, C tolik a D tolik...

přesně jak píšete, zahájit vysílání, počkat si na první čííslo, pokud bude přijato, čekat na druhé, atd...tedy bude toto nejefektivnější řešení a nejprofesionálnější? Ptám se z pohledu té "meteorologie" :lol:

Ostatní už jste mě naučili...respektive s kodem se pobiju a kdyz uz to nevydrzim, tak poprosim o radu, zatim metodologie
Návštěvník

#14 Příspěvek od Návštěvník »

michalino píše:tedy s radostí k věci:

posílám hodnoty klasickým příkaze print:

A=500
B=400
C=420
D=150

Print "Prvni hodnota-" ; A ; ".." ; "Druha hodnota-" ; B ; ".." ; "Treti hodnota-" ; C ; ".." ; "Ctvrta hodnota-" ; D
Tak to neposílej 🤐 printem, ale nějak normálně, třeba jako 8 bytů, pokud jsou to čtyři 16bitový integery. :roll:
To je jako to napsat na papír, naskenovat a rozpoznávat OCR.
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#15 Příspěvek od michalino »

Dobrý den přátelé,

tak jsem nasimuloval program na simulátoru v bascomu a vypadlo z něj toto, myslíte si, že je to dobrá cesta k přijetí čísla-čísel na UART a použití dále tohoto čísla k počítání .....? Čísla budou 4, zde je princip přijetí jednoho čísla a počítání s tímto jedním číslem:



Dim Rx_char As Byte
Dim Instring As String * 10
Dim Varval As Integer

Do
If Ischarwaiting() = 1 Then
Rx_char = Inkey() ' stisknu klávesu 4 a simuluju přijetí čísla 4

Print "Stiskl jsi (na rs 232 bylo posláno číslo:)"
Printbin Rx_char ' 4

Instring = Str(rx_char) ' prevod znaku ze stringu na pocitatelny format
Varval = Val(instring) ' prevod znaku ze stringu na pocitatelny format

Varval = Binval(varval)

Varval = Varval * Varval ' Provedu nějaký výpočet 4 * 4
Print Varval ' vytisknu výpočet 16

End If
Loop
End



a další číslo přijde na řadu...


je to tak v pořádku nebo existuje lepší varianta a anonyme, jak jsi to myslel prosím Ty?
děkuji
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“