Forum » Elektrotehnika in elektronika » rs-232
rs-232
atasmrk ::
Trenutno se zarad ene seminarske ukvarjam s programiranjem atmelovega ATtiny26 procesorcka. Rad bi vzpostavil komunikacijo med racunalom in atmelom (za zacetek bo samo atmel posiljal, nic sprejemal, racunalo pa samo sprejemalo in nic posiljalo). Odlocil sem se za rs-232 standard, to pa zato, ker se ga kljub vsemu napredku se vedno najde na vecini racunalnikov, poleg tega pa naj nebi bil prezakompliciran.
Zaenkrat sem prebral nekaj tutorialov, wikipedio, ostalo pa mi je se nekaj vprasanj (oziroma bi se rad preprical, da razmisljam pravilno).
1) Koliko linij se uporablja za komunikacijo? Prvotni standard je predvideval nekaj na vseh 25 zicah, ker vecine stvari niso uporabljali so se spomnili 9 zicnega standarda. Zanima me, ce je dovolj povezava samo po eni zicki (ce gledamo iz racunalnika bi bilo to po RD liniji).
2) Po standardu bi se moglo na linijah nahajati med -12 in +12 voltov. Vendar sem tukaj prebral, da sodobna oprema dopusca nivoje med 0 in +5 volti. Kako je s tem na domacih racunalnikih?
3) Glede hitrosti prenosov. Nekdaj se je uporabljal baud, vsak baud pa je predstavljal en bit. 9600 baudov na sekundo torej pomeni 9600 bitov na sekundo? Na faksu nam niso ravno veliko povedali o tej enoti. Dokaj preprosto je razlozeno tukaj, in po tem tekstu je povzeto moje znanje.
4) Kdaj se prenos enega okvirja zacne niti ni vazno. Racunalnik zazna start bit in takrat zacne sprejemati bit po bit. Sinhronizacije med napravo in racunalnikom ni, vse je odvisno od casov, ob katerih naprava posilja podatke. koliko casa naj bo en bit na liniji pa je odvisno od baud rate-a. Pri 9600 baudih, bi torej morala naprava en bit posiljati 0,000104 sekunde ali s frekvenco 9,5 kHz. Ali je to pravilno?
Tekom mojega izobrazevanja se bo zelo verjetno nabralo se kaj vprasanj, za vse odgovore pa se vam lepo zahvaljujem.
Zaenkrat sem prebral nekaj tutorialov, wikipedio, ostalo pa mi je se nekaj vprasanj (oziroma bi se rad preprical, da razmisljam pravilno).
1) Koliko linij se uporablja za komunikacijo? Prvotni standard je predvideval nekaj na vseh 25 zicah, ker vecine stvari niso uporabljali so se spomnili 9 zicnega standarda. Zanima me, ce je dovolj povezava samo po eni zicki (ce gledamo iz racunalnika bi bilo to po RD liniji).
2) Po standardu bi se moglo na linijah nahajati med -12 in +12 voltov. Vendar sem tukaj prebral, da sodobna oprema dopusca nivoje med 0 in +5 volti. Kako je s tem na domacih racunalnikih?
3) Glede hitrosti prenosov. Nekdaj se je uporabljal baud, vsak baud pa je predstavljal en bit. 9600 baudov na sekundo torej pomeni 9600 bitov na sekundo? Na faksu nam niso ravno veliko povedali o tej enoti. Dokaj preprosto je razlozeno tukaj, in po tem tekstu je povzeto moje znanje.
4) Kdaj se prenos enega okvirja zacne niti ni vazno. Racunalnik zazna start bit in takrat zacne sprejemati bit po bit. Sinhronizacije med napravo in racunalnikom ni, vse je odvisno od casov, ob katerih naprava posilja podatke. koliko casa naj bo en bit na liniji pa je odvisno od baud rate-a. Pri 9600 baudih, bi torej morala naprava en bit posiljati 0,000104 sekunde ali s frekvenco 9,5 kHz. Ali je to pravilno?
Tekom mojega izobrazevanja se bo zelo verjetno nabralo se kaj vprasanj, za vse odgovore pa se vam lepo zahvaljujem.
Zlikovec ::
Evo:
1. Za komunikacijo rabiš tri linije: Rx, Tx in Gnd (na db9 so to pini 2, 3 in 5); ostalo so kontrolni biti ...
2. mikrocontroler deluje na 5 V, se pravi da moraš nivoje signalov na rs232 portu, ki se gibljejo od -12 V (logična enica) do +12 V s pomočjo enega izmed max čipov prilagoditi na 0 - 5 V;
3.baud je trenutno že stara enota, pretvorba v bite na sekundo je: r=rb *log2*N, kjer je r hitrost v bit/s in rb hitrost v baudih, N je število možnih prenašanih vrednosti (smo v dvojiškem sistemu, torej N=2);
4. glavno je, da sta sprejemnik in oddajnik nastavljena na enako hitrost v baudih; vse ostalo je narejeno že v samem uart-u. tu se ti ni treba preveč ubadati hitrostmi in frekvencami prenosov.
Za atmele ti priporočam C compiler CodeVisionAVR, ima že narejene funkcije za delo z uartom, v glavnem boš z pošiljanje na rs232 port uporavil en klic funkcije: putchar ('r'); :)
CodeVisionAVr je z omejitvijo producirane kode na 2k kode zastonj ...
1. Za komunikacijo rabiš tri linije: Rx, Tx in Gnd (na db9 so to pini 2, 3 in 5); ostalo so kontrolni biti ...
2. mikrocontroler deluje na 5 V, se pravi da moraš nivoje signalov na rs232 portu, ki se gibljejo od -12 V (logična enica) do +12 V s pomočjo enega izmed max čipov prilagoditi na 0 - 5 V;
3.baud je trenutno že stara enota, pretvorba v bite na sekundo je: r=rb *log2*N, kjer je r hitrost v bit/s in rb hitrost v baudih, N je število možnih prenašanih vrednosti (smo v dvojiškem sistemu, torej N=2);
4. glavno je, da sta sprejemnik in oddajnik nastavljena na enako hitrost v baudih; vse ostalo je narejeno že v samem uart-u. tu se ti ni treba preveč ubadati hitrostmi in frekvencami prenosov.
Za atmele ti priporočam C compiler CodeVisionAVR, ima že narejene funkcije za delo z uartom, v glavnem boš z pošiljanje na rs232 port uporavil en klic funkcije: putchar ('r'); :)
CodeVisionAVr je z omejitvijo producirane kode na 2k kode zastonj ...
Ducati Monster, Ducati 750 SS FF, Yamaha XJ6,
Honda Hornet 600, Yamaha Fazer 800, R NineT
Honda Hornet 600, Yamaha Fazer 800, R NineT
atasmrk ::
Hvala za odgovore.
Zlikovec: Z veseljem bi uporabil UART, pa ga ATtiny26 nima. Ima samo Universal Serial Interface. Sicer podatkov z njim ni tako tezko posiljati (generiras neki clock, ob katerem vmesnik posilja podatke, ki jih dobi v shift redgistru, kamor smo jih zapisali mi), ni pa da bi kar vmesniku nastavil bitrate. Zato sem spraseval o tistih timingih.
CodeVisionAVR pa na zalost ne morem uporabiti, ker se grem plavanje proti toku in uporabljam Linux. Poleg tega mi je koda za mikrokontrolerje v C-ju skorajda bolj nepregledna od kode v asemblerju.
Zlikovec: Z veseljem bi uporabil UART, pa ga ATtiny26 nima. Ima samo Universal Serial Interface. Sicer podatkov z njim ni tako tezko posiljati (generiras neki clock, ob katerem vmesnik posilja podatke, ki jih dobi v shift redgistru, kamor smo jih zapisali mi), ni pa da bi kar vmesniku nastavil bitrate. Zato sem spraseval o tistih timingih.
CodeVisionAVR pa na zalost ne morem uporabiti, ker se grem plavanje proti toku in uporabljam Linux. Poleg tega mi je koda za mikrokontrolerje v C-ju skorajda bolj nepregledna od kode v asemblerju.
TESKAn ::
Universal Serial Interface == UART. Lepo flikneš na RX in TX liniji MAX232 čip, ki ti spremeni nivoje, povežeš na računalo in je. Drugače si pa poglej tale pdf, je noter napisano, kako uporabit USI za UART.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
atasmrk ::
Tole temo malo obujam od mrtvih, pac zato, ker se moje tezave nadaljujejo.
Po temeljitejsem branju tistega pdf-ja sem prisel do zakljucka, da USI != UART. Eden izmed nacinov delovanja tega USI-ja je Two-Wire Interface, kar pa naj bi bilo ekvivalentno i2c-ju ( vir). Se ga pa da, z malo telovadbe, uporabiti kot UART. In tu je zelo pomembno, da ves koliko casa naj bo informacija na liniji prisotna.
Driver v pdf-ju zgoraj sem prepisal v mC, in ugotovil, da pac nekaj posilja. Tudi to je nekaj. Sedaj pa bi rad videl, da zacne posiljati tisto kar jaz hocem da posilja. V programu naj bi posiljal samo nicle, ko pa ga gledam na racunalu, posilja marsikaj. Cisto tipicno posiljanje je nekaj takega (v hex): 42 5a c5 42 44 42 52 62 A2 22 62 CC 42 od trenutka ko prizgem mC. Pri vec zaporednih izvajanjih se prenasane informacije minimalno razlikujejo. Po nekako sekundi pa so podatki nekako taksni: 42 42 42 42 42 42 46 42 23 42 42 42 42... Ce na racunalu spremenim baudrate, velikih razlik v podatkih pravzaprav ni opaziti.
Na mC kolikor se le da hitro Tx nastavim na 1 (kar naj bi bilo po rs-232 mirovno stanje). Vezje naj bi na Tx liniji pri mC-ju vsebovalo en pull-up upor (ce sem prav informiran je to preko upora na linijo povezanih +5V). Kako velik pa naj bi ta upor bil bil? Trenutno imam 500 omov, wikipedia pravi, da so tipicni pull-up upori za ttl veliki od 1000 do 5000 omov. Torej moram najti nekj vecjega?
Toliko od dejanskem stanju. Ima kdo kaksno idejo, kako tako stvar popriviti?
Po temeljitejsem branju tistega pdf-ja sem prisel do zakljucka, da USI != UART. Eden izmed nacinov delovanja tega USI-ja je Two-Wire Interface, kar pa naj bi bilo ekvivalentno i2c-ju ( vir). Se ga pa da, z malo telovadbe, uporabiti kot UART. In tu je zelo pomembno, da ves koliko casa naj bo informacija na liniji prisotna.
Driver v pdf-ju zgoraj sem prepisal v mC, in ugotovil, da pac nekaj posilja. Tudi to je nekaj. Sedaj pa bi rad videl, da zacne posiljati tisto kar jaz hocem da posilja. V programu naj bi posiljal samo nicle, ko pa ga gledam na racunalu, posilja marsikaj. Cisto tipicno posiljanje je nekaj takega (v hex): 42 5a c5 42 44 42 52 62 A2 22 62 CC 42 od trenutka ko prizgem mC. Pri vec zaporednih izvajanjih se prenasane informacije minimalno razlikujejo. Po nekako sekundi pa so podatki nekako taksni: 42 42 42 42 42 42 46 42 23 42 42 42 42... Ce na racunalu spremenim baudrate, velikih razlik v podatkih pravzaprav ni opaziti.
Na mC kolikor se le da hitro Tx nastavim na 1 (kar naj bi bilo po rs-232 mirovno stanje). Vezje naj bi na Tx liniji pri mC-ju vsebovalo en pull-up upor (ce sem prav informiran je to preko upora na linijo povezanih +5V). Kako velik pa naj bi ta upor bil bil? Trenutno imam 500 omov, wikipedia pravi, da so tipicni pull-up upori za ttl veliki od 1000 do 5000 omov. Torej moram najti nekj vecjega?
Toliko od dejanskem stanju. Ima kdo kaksno idejo, kako tako stvar popriviti?
atasmrk ::
Ok, major breakthrough.
Izkazalo se je, da maxim 232 pretvori logicno 1 v -10V in logicno 0 v +10V. Jaz sem predpostavljal, da dela ravno obratno. Sedaj stvar v 50% primerih dela prav. Se mal se bo treba poigrat.
Izkazalo se je, da maxim 232 pretvori logicno 1 v -10V in logicno 0 v +10V. Jaz sem predpostavljal, da dela ravno obratno. Sedaj stvar v 50% primerih dela prav. Se mal se bo treba poigrat.
atasmrk ::
Oh ja, prezgodaj sem se veselil.
Dva dneva twekanja timingov, frekvence mC-ja... Vse to pa samo za to, da sedaj na vsake kvatre PC prebere 0x00. Sploh ne izvaja kljucnega dela kode. Ali pa sem samo jest to stvar ze tolikokrat videl da ne locim vec statusnega od kontrolnega registra.
VolkD, ce beres tole, tbi je ta mC baje usec. Mi lahko kako pomagas?
Dva dneva twekanja timingov, frekvence mC-ja... Vse to pa samo za to, da sedaj na vsake kvatre PC prebere 0x00. Sploh ne izvaja kljucnega dela kode. Ali pa sem samo jest to stvar ze tolikokrat videl da ne locim vec statusnega od kontrolnega registra.
VolkD, ce beres tole, tbi je ta mC baje usec. Mi lahko kako pomagas?
VolkD ::
Ja OK. Se bom pa oglasil.
Ni razloga, da bi ob današnjih cenah mikrokontrolerjev razbijal glavo. Vzameš mikrokontroler, ki je za to delo primeren. Ne vem zakaj bi moral vztrajati na ATTiny26.
ATTiny26 je sicer zelo simpatična stvar za reševanje mnogih problemov, a če rabiš UART potem pač vzameš drug mikrokontroler. ATMega8 recimo.
ATTiny26 je pa simpatičen zato ker pozna en zanimiv interupt. In sicer se ta interupt sproži, ki se stanje na nožicah spremeni. Torej se sproži neglede na to ali gre signal na 1 ali na 0. Interupt velja kar za skupino signalov.
Namesto rs232 bi mogoče veljalo razmisliti o USB.
Ni razloga, da bi ob današnjih cenah mikrokontrolerjev razbijal glavo. Vzameš mikrokontroler, ki je za to delo primeren. Ne vem zakaj bi moral vztrajati na ATTiny26.
ATTiny26 je sicer zelo simpatična stvar za reševanje mnogih problemov, a če rabiš UART potem pač vzameš drug mikrokontroler. ATMega8 recimo.
ATTiny26 je pa simpatičen zato ker pozna en zanimiv interupt. In sicer se ta interupt sproži, ki se stanje na nožicah spremeni. Torej se sproži neglede na to ali gre signal na 1 ali na 0. Interupt velja kar za skupino signalov.
Namesto rs232 bi mogoče veljalo razmisliti o USB.
Preden zaspiš zapri oči. Preden zapreš oči, ustavi avto.
VolkD ::
Jah.. glede na to kako si vztrajen ne verjamem, da te bom uspel prepričat. Torej je bolje da ti dam vsaj kak namig......
http://www.avrfreaks.net/index.php?modu...
http://www.avrfreaks.net/index.php?modu...
Preden zaspiš zapri oči. Preden zapreš oči, ustavi avto.
Zgodovina sprememb…
- spremenil: VolkD ()
atasmrk ::
Ne glede kako sem vztrajen, mislim da bom vzel enega Mega. Tudi moja vztrajnost ima neke meje. Za mojo aplikacijo je sicer malo overkill (se na tiny-ju bi bilo pol pinov nepovezanih), ampak dobro.
Po tistem pdf-ju pa sem tudi delal. Sicer sem naredil samo oddajnik, skenslal sem buffer (program s podatki za posiljanje caka dokler ni prejsnji prenos zakljucen), ampak to na samo izvajanje nebi smelo imeti vpliva.
Po tistem pdf-ju pa sem tudi delal. Sicer sem naredil samo oddajnik, skenslal sem buffer (program s podatki za posiljanje caka dokler ni prejsnji prenos zakljucen), ampak to na samo izvajanje nebi smelo imeti vpliva.
VolkD ::
Na desni strani imaš tudi rešitev. C koda je že narejena.
Je pa odločitev da izbereš ATMega8 prava. Tudi sam sem se že večkrat nasmolil in uporabil "podhranjen" procesor. Potem pa sem zagonil tolko časa, da ne odtehta niti če bi delal serijo v 10000 komadih.
Isto je z izbiro jezika. Ja asm je treba poznati, a da bi cele programe delal v asm je vsaj neracionalno, da ne rečem še kaj hujega.
Je pa odločitev da izbereš ATMega8 prava. Tudi sam sem se že večkrat nasmolil in uporabil "podhranjen" procesor. Potem pa sem zagonil tolko časa, da ne odtehta niti če bi delal serijo v 10000 komadih.
Isto je z izbiro jezika. Ja asm je treba poznati, a da bi cele programe delal v asm je vsaj neracionalno, da ne rečem še kaj hujega.
Preden zaspiš zapri oči. Preden zapreš oči, ustavi avto.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Siemens m35 - rs232 - AT commandsOddelek: Mobilne tehnologije | 3147 (2333) | JanezovJanez |
» | Merjenje napetosti akumulatorja z ArduinomOddelek: Elektrotehnika in elektronika | 9631 (8359) | Red_Mamba |
» | arduino in brezžična komunikacija (XBee,BT)Oddelek: Strojna oprema | 3336 (2833) | systx666 |
» | programiranje procesorja (strani: 1 2 3 4 … 8 9 10 11 )Oddelek: Elektrotehnika in elektronika | 36613 (26014) | icek |
» | Branje podatkov iz M35i s PIC-emOddelek: Elektrotehnika in elektronika | 1063 (959) | Tugo |