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

Pridružen-a: Tor 06 Jan 2004 9:25 Prispevkov: 138 Aktiv.: 0.58 Kraj: Bled
|
Objavljeno: Tor Feb 26, 2008 12:01 am Naslov sporočila: Dva mikrokontrolerja at89c4051 in UART komunikacija |
|
|
Pozdravljeni!
Veliko je podobnih tem na moj problem ampak točno takega nisem našel vforumu, zato sem odprl novo temo. Torej zadeva je naslednja:
Želim povezati dva ukontroleja at89c4051 da bi se lahko "pogovarjala" med seboj.
1.) Ali moram tudi vtem primeru uporabiti max232? Razdalja: cca 2-3m, uporabil bi kar kabel od telefonske slušalke (izmeril sem upornost cca 4.5 Ohm)
Če je odgovor JA, potem mi je jasno zakaj ne dela, če je odgovor NE, potem vprašanje št.2:
2.) Zadeva mi seveda ne špila, oz, mi deluje na naslednji način:
Če sem povezal ukontroler1 s Hypertermianlom in sem vtipkaval kode, se je vse odvijalo OK.
Če sem ukontroler2 povezal in opazoval izpise v Hyperterminalu je vse delalo OK
Potem pa sem dal ukontrolerju1 v neskonči zanki ukaz naj izpisuje št.1 ukontrolerju2 pa če bo prebral 1 naj prižge ledico. Dogajalo se je potem da mi je vsak toliko časa res prižgal ledico potem pa dolgo spte nič, v naključnem vrsten mredu. Potem sem dal ukaz če bo prebrana vrdnost različna od 0, in je ledica lepo svetila.
Zdi se mi kot da bi ne vedel kdaj je začetek byta ki ga dobi za prebrat...
Kakšen nasvet?
Programček sem pisal v BASCOM-u:
Program 1:
$baud = 9600
$crystal 11059200
Dim A As Byte
A = 1
Zanka:
Print A
Goto Zanka
Program2:
$baud = 9600
$crystal 11059200
Dim A As Byte
P1.0 = 0
Zanka:
Input A
If A = 1 Then
P1.0 = 1
Waitms 250
Else
P1.0 = 0
End If
Goto Zanka
End |
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Tor Feb 26, 2008 9:13 am Naslov sporočila: |
|
|
max232 se uporablja za pretvorbo nivojev. Se pravi če uporabljaš dve napravi ki imata iste nivoje ga ni treba uporabit.
Dolgo časa je že odkar sem nehal z bascomom, vendar mislim, da ukaz print brez dodatkov pošlje ascii kodo znaka + CR + LF. Tako, da če pošlješ 1 dobiš na drugem koncu 49 in še dva byta. Daj priklopi gor lcd in pa naredi izpis prejetega, da vidiš sploh kaj dobiš.
Avrji imajo tudi možnost vklopa interrupta za uart, ne vem kako je s tem pri teh prcesorjih.
namesto zanka...goto zanka je mogoče boljša uporaba do...loop ali pa while(1). _________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.70 Kraj: Kranj - struževo
|
Objavljeno: Tor Feb 26, 2008 10:37 am Naslov sporočila: |
|
|
Kako si ti to priklapljal na Hyperterminal? Z dodatnim MAXom ali kar direkt?
Da ugotoviš, kaj procesor sploh pošilja, uporabi kakšen boljši terminal, npr. Bray-ev, pri katerem uporabiš HEX izpis in ne ascii.
Pricesorja med seboj lahko priključiš direktno.
Najprej preizkušaj z 10 cm dolgim kablom! Ko to deluje, podaljšaj.
Hitrost 9600 ne bi smela biti previsoka.
Preveri, da imaš dobro maso med obema vezjema. Če uporabiš več žil paralelno, ne bo nič narobe.
Če misliš, da boš imel lahko inducirane motnje v kablu, uporabi twisted-pair kabel in RS422 komunikacijo in ne RS232. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
veter Član

Pridružen-a: Tor 06 Jan 2004 9:25 Prispevkov: 138 Aktiv.: 0.58 Kraj: Bled
|
Objavljeno: Tor Feb 26, 2008 11:14 am Naslov sporočila: |
|
|
Pozdravljena!
Na Hyperterminal sem preklopil preko MAX232...
Žal LCD ne morem priklopiti, ker sem (zaćetniška napaka) že izdelal končno ploščo samo z možnostjo izhoda RS232 preko MAX232).
Bom pa preveril, kako je s tistim +CR +LF (sicer se mi v tem trenutku še ne sanja kaj bi to bilo).
Baje lahko tudi Hyperterminal bere v HEX-u (to sem zvedel dopoldan). Torej bom probal nastaviti Hyperterminal v HEX in preveril tista +CR+LF (ker tudi to sem dobil danes indic od kolega da je baje možno da dobivam).
Zato je ideja, da bi poslal samo vsake recimo 100ms.
Ali mislite da se bom s tem izognil, da bi input prebiral še tista dva +CR in +LF?
Hvala lepa |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.70 Kraj: Kranj - struževo
|
Objavljeno: Tor Feb 26, 2008 2:12 pm Naslov sporočila: |
|
|
CR je "Carriage Return"
LF je "Line Feed"
To sta znaka, z desetiško vrednostjo napisana kot 13 in 10. Pomenita konec vrstice in začetek nove vrstice. Ko na tipkovnici pritisneš Enter, se generira koda 13 (CR).
Če se ti v Terminalu številke / znaki izpisujejo drug poleg drugega, potem nimaš CRLF.
Če pa se znaki izpisujejo drug pod drugim (v novi vrstici), potem imaš CRLF.
To sta dva dodatna znaka, ki se jima z delayem ne moreš izogniti. Lahko jih izklopiš na izvoru ali na sprejemu ignoriraš ali na sprejemu uporabiš kot znak za zaključek paketa podatkov.
HyperTerminal in HEX prikaz? Daj no daj Vic dneva.
Na koncu TE strani imaš link do Brayevega terminala. Priporočam.
P.S.
- V programu ki pošilja, dodaj neko majhno zakasnitev. Ne more škoditi.
- tesni znak vzemi namesto $01 raje recimo nek ASCII znak, ki se ti lepo izpisuje v terminalu.
- Za Naslednji korak vzemi serijo dveh znakov, npr. "V" in "W", eden prižge LED, drugi ugasne. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding 
Nazadnje urejal/a aly Tor Feb 26, 2008 2:29 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
veter Član

Pridružen-a: Tor 06 Jan 2004 9:25 Prispevkov: 138 Aktiv.: 0.58 Kraj: Bled
|
Objavljeno: Tor Feb 26, 2008 2:21 pm Naslov sporočila: |
|
|
Ja, znaki se mi izpisujejo lep oeden pod drugim...
No ja, priznam del krivde ker pač verjamem vsakomur kar mi povejo (glede Hyperterminala in HEX)...
Kakšna ideja kako se to reši v Bascomu (izklop oz ingoriranje teh dveh kod?)
Vsekakor bom pogledal link, hvala.
LP! |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.70 Kraj: Kranj - struževo
|
Objavljeno: Tor Feb 26, 2008 2:31 pm Naslov sporočila: |
|
|
Pogledaš v navodila od Bascoma oz. po domače
Ignoriranje ni možno, lahko pa narediš tako:
if A = CR then (do nothing)
if A = LF then (do nothing)
if A = "V" then (LED = 1)
if A = "W" then (LED = 0)
na primer. Sintaksa ni iz Bascoma, ker ga ne poznam.
Glede na zgoraj napisani program ti zadeva deluje. Znak 1 vklopi led, CR in LF (v else stavku) pa jo izklopita.
"Random" utripanje pa dobiš zato, ker en kontroler bruha podatke neprestano, drugi pa jih prebere samo 4x na sekundo, brez bufferja.
V prvem programu dodaj zakasnitev 1000ms, pa bo bolje. Upam, da ima ta tvoj kontroler vsaj 2 znaka HW bufferja, sicer ne bo šlo. Ali pa vrzi ven tistih 250ms neuporabne zakasnitve.
Še najbolje, pa če najdeš ukaz ali nastavitev, ki ne pošlje CRLF. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
veter Član

Pridružen-a: Tor 06 Jan 2004 9:25 Prispevkov: 138 Aktiv.: 0.58 Kraj: Bled
|
Objavljeno: Tor Feb 26, 2008 5:38 pm Naslov sporočila: |
|
|
Hvala za odgovor. Bom zvečer preizkusil katero od variant.
LP! |
|
Nazaj na vrh |
|
 |
veter Član

Pridružen-a: Tor 06 Jan 2004 9:25 Prispevkov: 138 Aktiv.: 0.58 Kraj: Bled
|
Objavljeno: Sre Feb 27, 2008 1:27 am Naslov sporočila: |
|
|
Dober večer /dobro jutro!
Zadeva je naslednja:
Nekako mi je uspelo da se ukontrolerja pogovarjata med seboj. Ukat PRINT mora imeti ; in se s tem znebiš CRLF, dodati sem mu moral ukaz za pavzico 1ms.
Podobno je tudi pri INPU manjkala pavzica.
Torej na ta način se mi uspeta pogovarjati.
Ampak sedaj ko gre zares pa se zopet ne pogovarjata. Namreč, z neskončno zanka preverjam štiri porte na katere so priključene štiri tipke. In zopet se nič ne zgodi. Če ni nobena tipka pritisnjena se pogovarjata (dal sem ukaz prin 1;) ko pa je katera tipka pritisnjena pa se nehata pogovarjati (čeprav sem po istem principu dal ukaz PRINT 1;). Kontrolna dioda zasveti, kar pomeni, da je ukontroler zaznal da je tipka bila pritisnjena.
Mislim, da je tu zopet problem s časovno sinhronizacijo.
Kako pa se sedaj reši ta problem?
LP! |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.70 Kraj: Kranj - struževo
|
Objavljeno: Sre Feb 27, 2008 4:29 pm Naslov sporočila: |
|
|
Paralelno sprejemniku vežeš 2 žici še na max232 in na terminalu gledaš, kaj se dogaja. Povsem verjetno je nekaj narobe s programom, ki pošilja. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
veter Član

Pridružen-a: Tor 06 Jan 2004 9:25 Prispevkov: 138 Aktiv.: 0.58 Kraj: Bled
|
Objavljeno: Sob Mar 01, 2008 11:28 pm Naslov sporočila: |
|
|
Ja, pozdravljeni vsi, ki sledite tej temi.
Odkril sem, kje je bila težava.
Namreč port P3 sem pred testiranjem postavil na 0 in s tem očitno zaklenil tudi TxD in RxD, ki se nahajata na P3.0 in P3.1. V tistem frugem testnem programu tega nisem naredil, zato mi je tam zadeva delovala.
Sicer sem poizkusil sedaj v BASCOM-u z ukazom OPEN, pa žal ne gre, tako da sem moral posamično zapreti tiste porte na P3, ki so me prej motili. Ima pa to slabo stran v tem, da če bo v komunikaciji kaj zaštekalo, da bom moral resetirati keypad...
Mogoče bom enkrat razvozlal kako pravilno odpreti z OPEN, da bo zadeva štimala, pa bi potem moral biti keypad tudi bolj stabilen.
No, zaenkrat sem se sprijaznil s tem.
Hvala vsem za nasvete in LP!
Tilen |
|
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: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|