 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Ned Jun 25, 2006 8:19 am Naslov sporočila: Komunikacija PIC - PC |
|
|
Pozdravljeni, s PIC18F458 in PCF 8583 sem naredil uro, sedaj pa bi rad podatke za sekunde, minute, ure, dneve ... poslal preko RS232 na PC, kjer bi jih bilo možno z namenskim programom (LabView, Visual Basic) videti. Uspelo mi je prikazati podatek za sekunde, tule se pa tudi vse skupaj konča. Zanima me na kakšen način je možno več različnih informacij spraviti na serijski port.
LP Vlado _________________ California |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Ned Jun 25, 2006 10:18 am Naslov sporočila: |
|
|
Kako mislis "vec razlicnih informacij" ? Naenkrat lahko posljes samo en bajt, ura pa recimo zahteva tri bajte + zacetek vlakca. Posljes torej stiri bajte in jih na drugi strani ustrezno interpretiras - ko pride zacetek, potem ves, da mu morajo slediti se trije bajti (npr. ure, minute in sekunde). |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Ned Jun 25, 2006 11:01 am Naslov sporočila: |
|
|
Torej pod informacijami sem mislil čas (sekunde, minute, ure, ... do letnice), potem pa še recimo meritve temperature v večih različnih točkah, digitalna stanja na kakšnih senzorjih. Skratka nek merilno - kontrolni sistem, katerega bi bilo možno nadzorovati (tudi) preko serijskega vmesnika. Mene predvsem zanima kako spraviti podatek o sekundah (0-3B hex) in ostale v tako imenovani vlakec. Koliko je prostora na takšnem vlaku in kaj naredimo, če imamo recimo dvakrat več podatkov, kot prostora na vlaku?
LP Vlado _________________ California |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Ned Jun 25, 2006 12:35 pm Naslov sporočila: |
|
|
Dolzina je prakticno neomejena. Najprej naredi seznam informacij, katere zalis odposlati (skupaj z velikostjo podatka) - npr.:
ure (1 bajt)
minute (1)
sekunde (1)
temperatura1 (2 bajta)
temperatura2 (2)
temperatura3 (2)
Odposlal bos torej znak za zacetek prenosa (izberes znak, ki se sicer ne pojavlja med podatki - npr. 0xff, ce pa se pojavlja tudi med podatki, potem izberes doloceno kombinacijo, ki se nemore pojaviti, kot npr. 0xffff) ter 1+1+1+2+2+2 bajtov, morda pa se checksum/CRC kodo, s katero bos preveril veljavnost podatkov, katero ti je izracunal tvoj program v MCUju. Vsak znak ("vagoncek") odposljes posamicno, tako kot se to pac naredi na izbranem MCUju (ce ima hardverski UART je ponavadi vse, kar moras storiti, to, da UART ustrezno anstavis, potem pa podatek zapises v ustrezen register in pocakas da ga MCU odposlje sam, potem pa jovo na novo do konca vlakca).
Na strani MCUja je stvar preprosta; ko se odlocis, da je primeren trenutek za odposiljanje (recimo zato, ker si dobil od PCja zahtevo za posiljanje ali zato ker je pretekla ena minuta od zadnjega posiljanja, ti pa posiljas vsako minuto ...), posljej vse zgoraj nasteto, eno za drugim.
Na PCjevi strani je malo drugace - ker ne mores vedeti ali MCU deluje in ali deluje pravilno, cakas na sprejem podatkov. Ce je prvi znak (ali prvih nekaj znakov) enakih tvoji prednastavljeni vrednosti (0xff v zgorjnem primeru), potem beres znake dalje; 1. bodo ure, drugi minute, itd., na koncu pa checksum/CRC, katerega spet preracunas in tako preveris ali so podatki veljavni (ce si seveda sploh uporabil tako metodo za preverjanje integritete podatkov).
Ce so podatki veljavni, potem tvoj program na PCju naredi z njimi kar pac hcoes da naredi (recimo jih zapise v bazo ali na zaslon).
Ce podatki niso veljavni, je to lahko zato, ker si zacel brati sredi vlakca, ali pa zato, ker naprava ne deluje (vec) pravilno. V obeh primerih so podatki prakticno neuporabni in jih je napametneje zavreci in pocakati na naslednji vlakec podatkov. |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Ned Jun 25, 2006 2:01 pm Naslov sporočila: |
|
|
Trenutno mi program na PICu približno 2x na sekundo zapiše na UART trenutno vrednost sekund in ta je ista tako na displeju na protobordu kakor tudi na PCju, kjer uporabljam LabView za čitanje iz com porta. V LV imam možnost izbire števila čitanja bajtov. Zanima me kako se bo zadeva obnašala pozneje, ko se bo uri priključila še ostala periferija, kjer se izvajajo meritve temperature preko OneWire vodila (ura je na i2c vodilu), obdelava izmerjenih podatkov in krmiljenje izhodov na osnovi izmerjenih podatkov, namreč ko je PIC naložen s kompletnim programom, je vse skupaj počasnejše. Mimogrede programiram v MikroBasicu in brez UARTa mi zadeva že špila.
Hvala za odgovore, se še priporočam!
LP Vlado _________________ California |
|
Nazaj na vrh |
|
 |
egomez Član


Pridružen-a: Sob 03 Apr 2004 18:49 Prispevkov: 517 Aktiv.: 2.18 Kraj: Ljubljana/Sežana
|
Objavljeno: Ned Jun 25, 2006 2:15 pm Naslov sporočila: |
|
|
Ne vem zakaj te moti, če bereš nekatere podatke iz OneWire in I2C, saj s PIC-em pač bereš te podatke na ustrezen način, potem pa jih zbereš tako obliko, da jih pošlješ preko UART-a. Kot je že Sokrat povedal, najprej nek start bit ali dva, nato pa enega za drugim tvoje podatke. V LV pa detektiraj start bit in nato prebereš koristne podatke ki jih želiš. |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Ned Jun 25, 2006 3:21 pm Naslov sporočila: |
|
|
Problem je v tem, da ne vem kako sprogramirati zadevo.
LP Vlado _________________ California |
|
Nazaj na vrh |
|
 |
egomez Član


Pridružen-a: Sob 03 Apr 2004 18:49 Prispevkov: 517 Aktiv.: 2.18 Kraj: Ljubljana/Sežana
|
Objavljeno: Ned Jun 25, 2006 3:35 pm Naslov sporočila: |
|
|
Ko želiš poslati podatke jih prebereš iz vhodnih portov in nekam shraniš. Nato pošlješ na PC recimo 0xffff in nato enega za drugim še ostale bite ki vsebujejo vrednosti, ki si jih prej prebral. Lahko pa najprej en podatek prebereš in ga pošlješ na PC, nato isto z drugim... tako do konca. V LV pa izbereš detekcijo 0xffff in nato nastaviš koliko bitov od tam naprej naj ti prebere. Nato ta "vlakec" razrežeš in dobiš ven željene podatke. |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Ned Jun 25, 2006 3:41 pm Naslov sporočila: |
|
|
Vsekakor bom poizkušal zadevo spraviti v pogon. Poročilo pa tudi sledi.
LP Vlado _________________ California |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|