Stránka 1 z 2
Zaslání 4hodnot A,B,C,D přes RS232 a příjemdo Atmega8 bascom
Napsal: 01 zář 2009, 08:04
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
Napsal: 01 zář 2009, 09:25
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á.
Napsal: 01 zář 2009, 09:31
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
Napsal: 01 zář 2009, 09:43
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

Napsal: 01 zář 2009, 09:48
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...
Napsal: 01 zář 2009, 09:50
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.

Napsal: 01 zář 2009, 10:06
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....
Napsal: 01 zář 2009, 10:57
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í!
Napsal: 01 zář 2009, 11:13
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
Napsal: 01 zář 2009, 13:33
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.

Napsal: 01 zář 2009, 14:45
od michalino
Tak to musím prozkoumat, děkuju...
Napsal: 01 zář 2009, 18:56
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í?
Napsal: 01 zář 2009, 22:49
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"
Ostatní už jste mě naučili...respektive s kodem se pobiju a kdyz uz to nevydrzim, tak poprosim o radu, zatim metodologie
Napsal: 01 zář 2009, 23:02
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.
To je jako to napsat na papír, naskenovat a rozpoznávat OCR.
Napsal: 02 zář 2009, 09:50
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