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

Pridružen-a: Tor 01 Feb 2005 23:49 Prispevkov: 65 Aktiv.: 0.27 Kraj: Mb
|
Objavljeno: Pon Okt 24, 2005 5:32 pm Naslov sporočila: UART komunikacija |
|
|
Lep pozdrav!
Že kar nekaj dni se mučim z eno stvarjo, pa ji ne pridem do dna, zato bi prosil, če je komu jasno karkoli otipljivega, za pomoč. Stvar je sledeča. Zaradi dolžine bom prikazal samo strnjen primer kode, ki pa mi v bistvu povzroča težave. V danem primeru se dogaja sledeče: Z Atmelom 2051 štejem frekvenco na enemu od pinov, ter nato podatek preko UARTA pošiljam v Atmel 89S8252, ki služi kot sprejemnik. Tam nato obdelam podatke, ter (v originalni kodi) nekaj izvršim. Dogaja se mi pa to: Po 88 "Loopih" v sprejemniku , nekaj zablokira. Ali ostane na LCD-ju prikazano da je bilo izvršeno 88 loopov in stvar ostane zablokirana, ali pa LCD v celoti potemni, ter po cca 5 sekundah ponovno prične prikazovati podatke, le da se ob tem stevec "LOOP-ov" resetira na 1, ter ponovno steje, seveda samo do 88. Probal sem že vsemogoče, ampak............ Zakaj ravno 88 in to zmeraj, to mi je uganka ki je ne znam razvozljati. Drugače je števec loop-ov brezpredmeten, v tem primeru je dodan samo zaradi lažje kontrole.
Koda: |
'Oddajnik - Atmel 2051
Dim Podatek As Word , A2 As Byte , Vstop As Byte
Dim S As String * 5 , I As Byte , Dum As Byte , Pomdum As Byte
$crystal = 12000000
Open "com3.1:300" For Output As #1
Open "com3.0:300" For Input As #2
' V loop zanki cakam na start bit iz sprejemnika
Do
Get #2 , Vstop
If Vstop <> "v" Then Loop
' Zakasnitev 500mS, da sigurno sprejmem start bit
Waitms 250
Waitms 250
' Navadni stevec impulzov
Config Timer0 = Counter , Gate = Internal , Mode = 1
Counter0 = 0
Start Counter0
Waitms 250
Waitms 253
Stop Counter0
Podatek = Counter0
'spremenim stevilo v string, da ga lahko posljem
'tudi ce je vecje kot Byte v sprejemnik
S = Str(podatek)
Dum = Len(s)
For I = 1 To Dum
A2 = Mid(s , I , 1)
Put #1 , A2
Waitms 30
Next
' A2 je zakljucni bit
A2 = "X"
Put #1 , A2
A2 = ""
Return
Close #1
Close #2
***************************************
'Sprejemnik - AT89S8252
$large
Dim A2 As String * 1
Dim S As String * 4
Dim Cifra As Single
Dim Prikaz As String * 4
Dim Stevec As Byte
Dim Vstop As Byte
Config Lcdpin = Pin , Db4 = P0.4 , Db5 = P0.2 , Db6 = P0.5 , Db7 = P0.3 , E = P0.1 , Rs = P0.0
Cursor Off
Config Lcd = 16 * 2
$crystal = 12000000
'stevec samo pomaga steti koliko Do-Loop
'zank se izvede
Stevec = 1
'Vstop je start bit za oddajnik
Vstop = "v"
Open "com3.0:300" For Input As #1
Open "com3.1:300" For Output As #2
Zacetek:
'posljem v oddajnik start bit
Put #2 , Vstop
'v loop zanki sprejemam podatke in ko prispe
'prekinitveni ("X") bit skoci iz zanke
' ter prikaze podatek
Do
Get #1 , A2
If A2 <> "" Then
If A2 = "X" Then
Cifra = Val(s)
Prikaz = Fusing(cifra , 0)
Exit Do
Else
S = S + A2
End If
End If
Loop
'brisem vrednost "S", prikazem podatek
' ter ponovim vse skupaj znova
S = ""
Cls
Lcd "vstop=" ; Prikaz
Lowerline
Lcd "stevec=" ; Stevec
Incr Stevec
Gosub Zacetek
Close #1
Close #2 |
|
|
Nazaj na vrh |
|
 |
micabauc Član


Pridružen-a: Tor 03 Jun 2003 7:12 Prispevkov: 177 Aktiv.: 0.75 Kraj: Celje
|
Objavljeno: Pon Okt 24, 2005 9:48 pm Naslov sporočila: |
|
|
Napisi v asemblerju, pa bo delalo!
Po mojem, ti zmanjka spomina, pa se stvar povozi.
Stevec lahko pade na 1 samo ce se program zresetira, ali pa se obrne okoli.(overflow). |
|
Nazaj na vrh |
|
 |
tibi Član

Pridružen-a: Tor 16 Dec 2003 11:08 Prispevkov: 253 Aktiv.: 1.07 Kraj: bukovje
|
Objavljeno: Tor Okt 25, 2005 6:16 am Naslov sporočila: |
|
|
micabauc je napisal/a: |
Napisi v asemblerju, pa bo delalo!
|
Zakaj pa bi moral pisati v asemblerju  |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.61 Kraj: Trzic
|
Objavljeno: Tor Okt 25, 2005 7:39 am Naslov sporočila: |
|
|
Ali ostane na LCD-ju prikazano da je bilo izvršeno 88 loopov in stvar ostane zablokirana, ali pa LCD v celoti potemni
Hm... Tole se mi zdi malce čudno. Si preveril napajanje? Imaš kakšen pin tako zvezan, da ti naredi kratek stik in restarta mikrokontroler? |
|
Nazaj na vrh |
|
 |
zuti Član

Pridružen-a: Tor 01 Feb 2005 23:49 Prispevkov: 65 Aktiv.: 0.27 Kraj: Mb
|
Objavljeno: Tor Okt 25, 2005 3:36 pm Naslov sporočila: |
|
|
Tudi meni se zdi čudno. Napake na vezju ni nikjer - preverjeno, sem pa pozabil napisati še en primer ki se pojavi. Če v "do - loop" zanki sprejemnika uporabim ukaz namesto "exit do" , "gosub...recimo.... prikazi:", pa se loop izvrši samo 44 krat, torej polovico manjkrat, nato sledi vse ostalo. Bil bi res zelo vesel, če bi kdo "piknil " ta dva čipa v testno ploščo, ter stvar sprobal. V kodi ne vidim napake, pa tudi Bascom v ozadju "vsaj mislim" generira asemblersko kodo, tako da ??? Tudi sam program je velik komaj nekaj čez 2 k ........ ne vem. Vse skupaj je v glavnem čudno. |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.61 Kraj: Trzic
|
Objavljeno: Tor Okt 25, 2005 4:40 pm Naslov sporočila: |
|
|
Daj priklopi vezje na serijski port računalnika in preko nekega terminalskega programa glej kaj se dogaja. Najprej si oglej, kaj prvi mikrokontroler sploh pošilja, potem pa še drugega priklopi in mu preko tipkovnice vpisuj znake ter glej rezultat. |
|
Nazaj na vrh |
|
 |
zuti Član

Pridružen-a: Tor 01 Feb 2005 23:49 Prispevkov: 65 Aktiv.: 0.27 Kraj: Mb
|
Objavljeno: Tor Okt 25, 2005 9:12 pm Naslov sporočila: |
|
|
Bom še probal malo "šarati" po programu, ker si moram narediti kable za povezavo na PC. Ali lahko sploh priklopim kontroler na PC brez Max-a 232? Pa v bistvu kaj bom videl na terminalskem oknu drugega, kot na LCD-ju? Če je napaka v oddajniku, bo tudi v terminalskem oknu prikazalo neko "kvako", če pa v sprejemniku, pa bo na LCD-ju prikaz isti, in zopet ne bom vedel čemu je vzrok takega prikazovanja. Alli se motim? |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Tor Okt 25, 2005 9:38 pm Naslov sporočila: |
|
|
Ne, ne mores prikljuciti mikrokontrolerja (TTL) neposredno na serijski port racunalnika (RS232) in racunati na to, da bi MCU prezivel.
Kaj bos videl v terminalskem oknu ? Niz podatkov, ki jih posilja oddajnik. Ker najbrz ves kaksne podatke naj bi oddajnik posiljal, jih bos lahko primerjal s pricakovanimi in ugotovil ali poslje tudi kaj cesar ne bi smel, kar posledicno povzroci crash na sprejemni strani. Ce je napaka v sprejemniku, bos to najlazje ugotovil tako, da izlocis drugi del (oddajnik). Cel kup dejavnikov vpliva na podatek, preden le-ta pride od oddajnika do LCDja; s spremljanjem na PCju bos vmesne dejavnike izlocil.
Zakaj bi to pocel ? Nakljucno spreminjanje kode je praviloma zelo neucinkovito; ce ves kje je problem, ga je bistveno lazje odpraviti, a ce ti ugibanje bolj ustreza - veliko srece, najbrz jo bos potreboval  |
|
Nazaj na vrh |
|
 |
zuti Član

Pridružen-a: Tor 01 Feb 2005 23:49 Prispevkov: 65 Aktiv.: 0.27 Kraj: Mb
|
Objavljeno: Tor Okt 25, 2005 10:26 pm Naslov sporočila: |
|
|
V vsakem primeru bi rad prišel stvari do dna, pa če bo treba, bom seveda tudi priklopil vse skupaj na PC. Veš, da kode naključno ne bom spreminjal, ker v bistvu niti nimam kaj spremenit, ker taka kot je, bi stvar po vseh pravilih morala delovati.
Poraja se mi pa eno vprašanje: Ko bom dodal Max-a 232, ali se bo dogajalo isto, ali ne? Veš, rad bi slišal kakšne izkušnje nekoga, ki je takšno ali pa slično stvar že naredil in ali je imel slične probleme ali ne. Obstaja mogoče celo možnost napake Bascoma pri prevodu kode?.
Če ne bo kakega otipljivega namiga, jutri priklopim na PC, Pa da vidim ! |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.61 Kraj: Trzic
|
Objavljeno: Tor Okt 25, 2005 10:28 pm Naslov sporočila: |
|
|
Poleg tega lahko narediš tudi test sprejemnika, tako da namesto oddajnika ti pošiljaš podatke preko serijskega vmesnika računalnika.
Kabel si pa le zrihti, to je osnova za enostavno 'razhroščevanje' programa. |
|
Nazaj na vrh |
|
 |
zuti Član

Pridružen-a: Tor 01 Feb 2005 23:49 Prispevkov: 65 Aktiv.: 0.27 Kraj: Mb
|
Objavljeno: Tor Okt 25, 2005 10:39 pm Naslov sporočila: |
|
|
Ja vse lepo in prav, samo vseeno: zakaj ravno vedno 88 ali pa 44 krat ? Nikoli enkrat več ali enkrat manj. Kot da se v sprejemniku nekaj polni z podatki, potem pa zzzccck!
No ja, bom videl jutri, ampak vseeno sumim, da mi v kodi nekaj manjka. |
|
Nazaj na vrh |
|
 |
Lagrange Član

Pridružen-a: Pet 10 Okt 2003 10:07 Prispevkov: 164 Aktiv.: 0.69 Kraj: Ljubljana
|
Objavljeno: Sre Okt 26, 2005 9:05 am Naslov sporočila: |
|
|
Meni se je nekaj podobnega dogajalo z MSP, ko sem pozabil izklopiti wdt. |
|
Nazaj na vrh |
|
 |
smatjaz Član


Pridružen-a: Pon 10 Nov 2003 16:33 Prispevkov: 847 Aktiv.: 3.57
|
Objavljeno: Sre Okt 26, 2005 9:41 am Naslov sporočila: |
|
|
Problem imaš s tem:
"Gosub Zacetek" !!!
Tu skačeš sam vase. To pa pomeni, da po določenem številu ciklov zapolniš RAM. V tvojem primeru je to verjetno 88. Poskusi s še eno Do.. Loop zanko, pa bo vse delalo tako kot treba.
LP Matjaž _________________ Električni aparati delujejo na dim ... ko dim iz njih uide ... ne delujejo več! |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3361 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sre Okt 26, 2005 4:06 pm Naslov sporočila: Ali pa |
|
|
ali pa namesto
gosub Zacetek
receš
goto Zacetek _________________ Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart |
|
Nazaj na vrh |
|
 |
zuti Član

Pridružen-a: Tor 01 Feb 2005 23:49 Prispevkov: 65 Aktiv.: 0.27 Kraj: Mb
|
Objavljeno: Sre Okt 26, 2005 5:07 pm Naslov sporočila: |
|
|
Probal sem goto začetek, čeravno mora delovati tudi z gosub, probal sem dodati še eno do - loop zanko pa nič novega. Pa saj v bistvu tudi z do - loop zanko skačeš "sam v sebe" , ali ne? To da se mu polni ram tudi sam sumim, samo kako to preprečiti - tega nažalost ne vem.
Lagrange, kaj si mislil s tem: Meni se je nekaj podobnega dogajalo z MSP, ko sem pozabil izklopiti wdt.. Mi lahko prosim malo podrobneje namigneš?
Zvečer pa probam priklopiti na PC, pa da vidim. |
|
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: 495 dni
Powered by phpBB © 2001, 2005 phpBB Group
|