 |

|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 05 22, 23:09. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » atmega8 ir USART
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 3 Pereiti prie 1, 2, 3 Toliau |
|
 |
 |
 |
atmega8 ir USART |
Parašytas: 2011 07 08, 19:50 |
|
|
|
Tokia situacija.
Sukasi begalinis ciklas, sastoviai skaitomi duomenys iš USART ir pagal tuos duomenis programa vykdo tam tikrus veiksmus. Kokius čia visai neesminis dalykas. Priimti duomenys papuola į buferį. Jei yra bent vienas nuskaitytas baitas, programa prasisuka vieną ciklą. Toks nuskaitymo būdas geras, viskas veikia, tačiau kartais, dėl nesuprantamų priežasčių, programa sustoja. Sustojimas reiškia, kad duomenų nėra, laukia kol atsiras. Kodėl duomenų nėra, negaliu suprast. Priežastys gali būti įvairios, sakykim dėl kokių tai priežasčių pastrigo tas duomenų buferis. Esmė tame, kad jei duomenys neteisingi, tačiau kažkas visgi nuskaitoma, programa skaitys, kol pasirodys teisingi duomenys. Patys duomenys tikrai nedingsta, t.y. iki atmegos tikrai ateina.
Šiuo atveju, svarbiausias dalykas, kad programa nesustotų. T.y. duomenų priėmimas labai svarbus. Tačiau nėra labai svarbu, jei dalis duomenų pradings. Galima prarast 20-50 baitų, bet reikia skaityt toliau.
Kaip padaryt taip, kad jei tik kažkurį laiką duomenų nebuvo gauta, imtis kažkokių priemonių atgaivint procesą. Pvz. išvalyt visą buferį, kažkaip resetint USART, arba dar kažkaip išsisukt iš tokios situacijos.
Gal kas turit idėjų, kaip protingiau organizuot tokį procesą? |
|
|
|
|
 |
 |
atmega8 ir USART |
Parašytas: 2011 07 08, 21:21 |
|
|
|
Gal eitu tai padaryti su watchdog taimeriu jei neklystu jis po kiek laiko restartuoja mikroschema ir tarkim kas kazkiek laika nunulinam taimeri ir mikroschema nepersikrauna, o jei blogai kas blogai tada taimeris nenusinulins ir po tam tikra laika mikroschema nusiresetins. (Jei taip supratau watchdog principa ) |
|
|
|
|
 |
atmega8 ir USART |
Parašytas: 2011 07 08, 22:20 |
|
|
|
rysio klaidas reikia apdoroti, bei rupintis sinchronizacija. |
|
|
|
|
 |
atmega8 ir USART |
Parašytas: 2011 07 08, 22:36 |
|
|
|
kiek daznai ta problema ivyksta?
ir kur garantija kad sutojama butent toje vietoje?
Jei kokio nors baito nprieme tai turetu pratesti darba kai priims sekanti jei tau sustoja visam laikui tai turbut procesorius pakimba |
|
|
|
|
 |
 |
atmega8 ir USART |
Parašytas: 2011 07 08, 23:44 |
|
|
|
Problema atsiranda labai retai. Todėl nustatyti kame reikalas sunku.
Baitai priiminėjami USART pertraukime į buferį. Aš tik žiūriu ar yra koks baitas buferyje, jei yra imu jį lauk ir važiuoju toliau. Jei nėra, programa stovi ir laukia kol atsiras. Bet šiuo atveju sustojimų neturėtų būt, nes duomenys eina pastoviai.
Resetint mega8 nesinorėtų, tai sukels trumpą, bet labai nepageidaujamą sutrikimą.
Iš tikro neįsivaizduoju kaip nustatyti kurioje vietoje sutrikimas, nes galima bandyt neribotą laiką ir taip ir nepamatyt šios problemos. Todėl klaida programoje labai mažai tikėtina. Tuo labiau, kad programa labai paprasta. Bet kartais be jokių pastebimų priežasčių ima ir pasireiškia.
Bandžiau kibt prie maitinimo, kad gal kokie trukdžiai praeina, bet be teigiamų rezultatų... |
|
|
|
|
 |
atmega8 ir USART |
Parašytas: 2011 07 08, 23:51 |
|
|
|
Manau tada vienintelė logiška minti pakeisti tą atmegą į naują  |
|
|
|
|
 |
atmega8 ir USART |
Parašytas: 2011 07 09, 00:50 |
|
|
|
ReM rašo: |
Bet šiuo atveju sustojimų neturėtų būt, nes duomenys eina pastoviai.
|
ka reiski zodis "sustojimu" ?
tai tau trumpam sustoja ar visam laikui toliaus ignoruoja visus ateinancius duomenis.
jey antrasis varisntas akivazdu kad atmega pakibo.o duomenu priemimas ar perdavimas cia ni prie ko |
|
|
|
|
 |
atmega8 ir USART |
Parašytas: 2011 07 09, 05:15 |
|
|
|
ar tik ne trukdziu problema? ar tinkamai suformaves iejimo/isejimo schemotechnika bei zemiu moksla? gal gauna koki siuksliu impulsa (tame tarpe ir per maitinima) ir sminga? |
|
|
|
|
 |
 |
atmega8 ir USART |
Parašytas: 2011 07 09, 10:38 |
|
|
|
Taip, trukdžio varianto atmesti negaliu. Bet kaip įsitikint? Man realiausias variantas atrodo, kad kažkodėl "paspringsta" USART, pvz. dėl kokio trukdžio duomenyse. Šiaip mega dar generuoja tam tikrą PWM signalą, jis nedingsta, veikia kaip veikęs...
mega8 į naują keist bandžiau, tas pats.
Ką reiškia sustojimas. Paprastas dalykas. Nuskaitymo iš buferio procedūra tokia, kad jei buferyje nėra nė vieno baito ji sustos ir lauks kol atsiras. Jei nuskaitymas yra kažkokiame cikle, tai visas ciklas sustos. Čia standartinė codevisionavr procedūra. Beje išbandyta daugybę kartų, ji tikrai veikia šiaip jau normaliai.
Jei kyla klausimas kodėl sustoja, tai irgi galima paaiškint. Juk jei eina kažkokios duomenų sekos, kurias reikia skaityt iš eilės, tai pramesti negalima nė vieno baito. Aišku yra situacijų, kada reikia kaip tik atvirkščiai, jei duomenų nėra, varom toliau, pažiūrėsim ar atsirado sekančiame nuskaityme.
O problema tame, kad sustoja visai, t.y. rezultatas tas pats, kaip ir tuo atveju, jei buferyje nėra duomenų. Nors patys duomenys eina visą laiką... |
|
|
|
|
 |
 |
atmega8 ir USART |
Parašytas: 2011 07 09, 11:40 |
|
|
|
USART negali paspringti, gali ivykti tiktais rysios arba aptarnavimo klaidos.
pvz uC gaves nepilna simboli nustato klaidos veliaveles, pranesimo apie priemima aisku negeneruoja, nes nera del ko ji generuot, tu pvz netikrini ir neisvalai klaidos bei priemimo registro, tad priemus sekanti baita vel klaida.
kitas variantas - netiksli sinchronizacija, kuria butu galima spresti ivedus papildomus stop bitus ar pauzes siunciant i uC, o isvedant is mC tik korektisku pauziu tereikia.
visi signalu ivadai patartina daryti bent per keletos kOm varzas, isvedimo bent per keliu simtu Om, mases laidai nuo iejimu, isejimu, kvarco ar taktionio generatoriaus, uC maitinimo (yra skaitmenines ir analogines dalies atskirai) susieitu viename taske zvaigzdes principu (isskyrus atveji kai tinkamai suprojektuoji isejimo ir iejimo kaskadu papildomus maitinimus). |
|
|
|
|
 |
 |
atmega8 ir USART |
Parašytas: 2011 07 09, 13:41 |
|
|
|
Per kiek laiko sincronizuojasi priėmimas po klaidos? Mano pastebėjimais prameta keletą baitų. Bet gal ir blogesnių situacijų būna?
Perdavimo protokolo pakeisti aš negaliu. Ne mano kūrybos įrenginys perdavinėja duomenis.
Perdavimo greitis didelis - 115200. Kvarcas "teisingas". Be to, perdavimas vyksta iš 3,3 V matinamo įrenginio. Pas mane 5V. Reiškia signalo lygiai neatitinka 5V TTL. Bet kiek bandžiau šiaip niekada dėl to klaidų nepastebėjau. Gal visgi čia priežastis?.. |
|
|
|
|
 |
atmega8 ir USART |
Parašytas: 2011 07 09, 14:12 |
|
|
|
Aš tokiu atveju įtampų lygių konvertavimui esu naudojęs tokią mikrę http://www.fairchildsemi.com/ds/74/74LCX125.pdf
Bet kaip AlgisL ir minėjo- labai svarbi gera schemotechnika. Net per ilgi maitinimo laidai gali įtakot veikimą. Turėjau bėdų, kad RX pinas iš niekur nieko visai nustodavo veikt. Atjungus maitinimą, po poros valandų vėl viskas čiki.. |
|
|
|
|
 |
 |
atmega8 ir USART |
Parašytas: 2011 07 09, 14:29 |
|
|
|
apdorok interuptus tiek priemimo, tiek klaidos. gaves klaida numesk klaidos bitus ir nuskaityk baita is priemimo registro bei atzymek viesame kintamajame klaidos statusa, jei programos logika reikalauja dar ir buferi isvalyk, o main cikle tinkamai reaguok.
tiesa, gali modifikuoti schema taip:
iejime i mase det 3,3..3,6V stabilitrona, paskui 1..10kOm varza i 5V ir tada i RX, gali dar nuosekliai imest kokia varzike, dar ir koki 100pF konderiuka lygiagreciai stabilitronui.
TX isejime 200Om..2kOm varza i tavo irengini ir i mase per 3,3..3,6V stabilitrona, konderis lygiaigreciai stabilitronui kokiu 100pF irgi gali pataisyti situacija. |
|
|
|
|
 |
 |
atmega8 ir USART |
Parašytas: 2011 07 09, 16:31 |
|
|
|
ReM rašo: |
O problema tame, kad sustoja visai, t.y. rezultatas tas pats, kaip ir tuo atveju, jei buferyje nėra duomenų. Nors patys duomenys eina visą laiką... |
tai tokiu atveju ieskok klaidos savo programoje, UART hardwaras sustoti negali jam visai niekas nerupi ka gauna.
gal tavo buferis persipildo ir ka nors sugadina?
tiesa jei duomenys eina isvis be sustojimo tai UART gali pamesti sinchronizacija ir priimineti nesamones, bet vistiek nesustos. |
|
|
|
|
 |
atmega8 ir USART |
Parašytas: 2011 07 09, 22:52 |
|
|
|
Ačiū už patarimus, bandysiu aiškintis... |
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Football Training Kit
Football Training Equipment,
Football Skills,
Football Training |
|

|
 |