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



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3360 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sre Maj 14, 2008 7:39 pm Naslov sporočila: Uh |
|
|
Uh, če je tako, potem pa bo težko ujel naš vlak!
morda je bolje, da si odpre novo ime in začne od začetka, bo lažje ujel zahtevano povprečje .. _________________ 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 |
|
 |
kose19 Član


Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.18 Kraj: okolica Kobarida
|
Objavljeno: Pon Jun 08, 2009 10:27 pm Naslov sporočila: |
|
|
Ker je naslov teme primeren bom kar tukaj vprašal.
Dva avr-ja bi rad pripravil do komunikacije. Za začetek prvi oddaja in drugi posluša. Prvi pošilja na uart 001, 002, 003, 004, ... 097, 098, 099, 100 in spet od začetka. Med vsakim Printom pa imam 1s pavze.
Drugi naj bi to bral in izpisoval na lcd. Na terminalu je vse lepo in prav in lepo izpisuje vsako cifro v svojo vrsto oz. eno za drugo odvisno ali imam Print 0 ; 0 ; T2; ali Print 0 ; 0 ; T2
c pa mi bere in izpiše na lcd najprej stotice, desetice in nazadnje še enice in sicer na isto mesto na lcd-ju ( npr. prva vrstica, tretja pozicija).
Poizkusil sem z waitkey in z inkey pa ne dobim nič željenega.
V čem je finta? Kako te tri številke, ki priletijo po uartu pretvorit iz treh enomestnih v eno tromestno število? _________________ - Absens, carens -
- Tisti, ki ga ni, bo prikrajšan - |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 15.99
|
Objavljeno: Tor Jun 09, 2009 6:48 am Naslov sporočila: |
|
|
Ukaz PRINT ti najverjetneje ne pošilja številke ampak karakterje iz ASCII tabele. Tako 000 ni številka nič, ampak beseda s tremi znaki 0, ki jih pošlje preko UART vsakega posebej. Tako da če hočeš med dvema uC pošiljati številke, je najbolje da na izvornem uC uporabiš namesto PRINT nek drug ukaz (pri meni v Cju je to SendChar). Ali pa uporabiš nek drug način kodiranja.
Malce v premislek: kaj pa če bi za komunikacijo namesto UART uporabil IIC oziroma TWI? Lahko je hitrejša, lahko po istih žicah komuniciraš z večimi napravami, manj je hardversko zahtevna, pa še vse statuse o komunikaciji ti lahko sporoča. Preveri razlike v datasheetu. |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.37 Kraj: Lovrenc na P.
|
Objavljeno: Tor Jun 09, 2009 8:42 am Naslov sporočila: |
|
|
kose19 je napisal/a: |
Kako te tri številke, ki priletijo po uartu pretvorit iz treh enomestnih v eno tromestno število? |
Šiftaš jih v desno.
p.s. Odgovoril sem samo na vprašanje izvzeto iz konteksta! |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3360 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Tor Jun 09, 2009 9:07 am Naslov sporočila: Komunikacija |
|
|
Komunikacija ni tako zelo preprosta zadeva.
če gre za čisti simplex (avr A samo pošilja, AVR B samo sprejema) bi še nekako šlo
Recimo da teče v AVR A sledeč program
Koda: |
do
for i = 1 to 100
print i
wait 1
next
loop
|
to bi nekako odgovarjalo temu, kar si napisal.
Print i spremeni podatke iz spremeljivke i v posamezne ascii znake
Če je i na primer 10 bodo poslani sledeči znaki
H31 (to je enojka) H30 (to je ničla) in potem še dva znaka H0D in H0A ki povesta da je konec prenosa tega podatka.
Na sprejemni strani je potrebno podatke tako tudi sprejemati.
Input je ukaz, ki naj bi rešil ta problem, a sam nisem nikoli se posluževal tega ukaza temveč sem v prekinitvenem podprogramu lovil znak po znak in ga spravljal v spremenljivko tipa niz (string), med tem, ko je glavni program delal naprej, kar je pač imel delati. In ko je prekinitveni podprogram zaznal bajt H0D, je namesto le tega dal v niz kot sledeči znak H00 kar pomeni konec niza in potem je postavil zastavico - bit ki pomeni, spremenljivka sprejeta.
V glavnem programu se sprašuje, ali je ta bit postavljen, in če je, se podatek obdela.
Skoraj malo preveč, da bi vse opisal in razložil na tem mestu. _________________ 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 |
|
 |
kose19 Član


Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.18 Kraj: okolica Kobarida
|
Objavljeno: Tor Jun 09, 2009 9:20 am Naslov sporočila: |
|
|
lojzek je napisal/a: |
Malce v premislek: kaj pa če bi za komunikacijo namesto UART uporabil IIC oziroma TWI? Lahko je hitrejša, lahko po istih žicah komuniciraš z večimi napravami, manj je hardversko zahtevna, pa še vse statuse o komunikaciji ti lahko sporoča. Preveri razlike v datasheetu. |
Bom malo pregledal kaj omogoča atmega8 za katero bo ta čorba katero pišem.
Drugače mi je pa uspelo na naslednji način, da pošljem T2 kot string
Dim T As Byte , T2 As String * 5 (attiny2313)
T = T + 1
T2 = Chr(t)
Print T2;
in berem kot string, nakar ga "pretvorim" v word in izpišem na lcd.
Dim A As String * 5 , S As Byte (atmega8515)
A = Waitkey()
S = A
Locate 1 , 2 : Lcd Chr(s)
Locate 2 , 2 : Lcd S
Ne vem pa zakaj mi na lcd-ju dodočene karakterje (Locate 1 , 2 : Lcd Chr(s)) izpiše drugače kot terminal
Locate 2 , 2 : Lcd S
mi pa izpisuje številke 0-255, kar je to kar sem hotel.
Sedaj moram samo še naštudirat kako bom klical z mego in bo attiny odgovarjal na poziv  _________________ - Absens, carens -
- Tisti, ki ga ni, bo prikrajšan - |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 15.99
|
Objavljeno: Tor Jun 09, 2009 10:04 am Naslov sporočila: |
|
|
Ker praviš, da je eden od AVRjev tiny (verjetno 2313), TWI odpade, ker ga tinyji nimajo (vsaj tisti, ki jih poznam jaz).
Imajo pa druge komunikacijske protokole. USI in SPI. Ampak z njimi še nisem delal, tako da potem nimam kaj pametnega reči. Za začetek bo najlaže, če ostaneš kar pri UART |
|
Nazaj na vrh |
|
 |
kose19 Član


Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.18 Kraj: okolica Kobarida
|
Objavljeno: Tor Jun 09, 2009 10:43 am Naslov sporočila: |
|
|
Attiny2313 in atmega8515 uporabljam na testni plošči in ko bo tam približno delalo bom pa uporabljal dva atmega8. Ko bom pa malo napredoval v programiranju, bom pa z enim masterjem klical posamezne slave. Ravno zaradi tega me zanima tudi IIC oziroma TWI komunikacija (priznam pa da prvič slišim ). _________________ - Absens, carens -
- Tisti, ki ga ni, bo prikrajšan - |
|
Nazaj na vrh |
|
 |
SimonS Član



Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4769 Aktiv.: 20.13 Kraj: Kobarid
|
Objavljeno: Tor Jun 09, 2009 3:14 pm Naslov sporočila: |
|
|
Ne pošiljajo kot string, temveč kot byte, pa ne bo več težav.
Sicer tudi za nadalno obdelavo rabiš takšen tip. _________________ Lep dan
Simon |
|
Nazaj na vrh |
|
 |
MadMax Član


Pridružen-a: Pet 09 Sep 2005 22:16 Prispevkov: 4743 Aktiv.: 20.02
|
Objavljeno: Tor Jun 09, 2009 4:24 pm Naslov sporočila: |
|
|
IIC (I2C) ni primeren za daljše razdalje, primarno je razvit za komunikacijo med sklopi v eni napravi (primer: TV, povezava procesorja s TTX modulom, tunerjem, MF stopnjo, ...).
Za večje razdalje je UART še vedno nekako najprimernejši za amaterske potrebe. |
|
Nazaj na vrh |
|
 |
joze Član


Pridružen-a: Pet 26 Jan 2007 10:27 Prispevkov: 204 Aktiv.: 0.91
|
Objavljeno: Tor Jun 09, 2009 7:47 pm Naslov sporočila: |
|
|
LP!
Kose19 če ti kaj pomaga:
RX-------------------------------
Enable Urxc
On Urxc Seriska_prekinitev
Enable Interrupts
Dim Sprejem as Byte
Seriska_prekinitev:
Sprejem = Udr
Return
TX-------------------------------
Dim Byte_1 as Byte
Incr Byte_1
Printbin Byte_1 |
|
Nazaj na vrh |
|
 |
kose19 Član


Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.18 Kraj: okolica Kobarida
|
Objavljeno: Čet Jun 11, 2009 8:34 am Naslov sporočila: |
|
|
joze je napisal/a: |
RX-------------------------------
Enable Urxc
On Urxc Seriska_prekinitev
Enable Interrupts
Dim Sprejem as Byte
Seriska_prekinitev:
Sprejem = Udr
Return
|
Če prav razumem ta del, z ukazom
Enable Urxc
omogočimo prekinitev ko pride signal na RX in program skoči v podprogram
Serijska_prekinitev:
Sprejem je spremenljivka poljubnega tipa in z
Sprejem = Udr
beremo direktno iz vhodnega registra UARTa
Ali je potrebno najprej poslati "start bit" preden pošljemo uporabne podatke, da se kaj na začetku nebi izgubilo? _________________ - Absens, carens -
- Tisti, ki ga ni, bo prikrajšan - |
|
Nazaj na vrh |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 5.67 Kraj: KOPER
|
Objavljeno: Čet Jun 11, 2009 11:09 am Naslov sporočila: |
|
|
To preizkušeno dela v ozadju z interapti .
seveda moraš v glavi nastaviti hitrost
Koda: |
DIM Rs_rxbuffer(255) AS BYTE
DIM Rs_rx_flag AS BIT
DIM irs_rx AS BYTE
DIM irs_rx_M AS BYTE
irs_rx=0
Irs_rx_m = 0
Reset Rs_rx_flag
Enable Urxc0
On Urxc0 Rec_isr0
'*****************************************************************************
Do
If Rs_rx_flag = 1 Then 'KO JE SPREJETA SEKVENCA SE TU ZAČNE IZVAJANJE
Reset Rs_rx_flag 'PROGRAMA
WHILE irs_rx_M < irs_rx
Lcd Rs_rxbuffer(irs_rx_m) ' izpis na lcd
Incr Irs_rx_m
Wend
Irs_rx_m = 0 ' zbrisemo oba indeksa ce imamo kratek sprejemni buffer
Irs_rx = 0 '
ENDIF
' TU SE LAHKO IZVAJAJO OSTALI DELI PROGRAMA
LOOP
'****************** SERIAL INTERRUPT SERVICE RUTINE **************************
Rec_isr0:
' Lcd "#"
A = Inkey(#0) ' KO SE POJAVI PREKINITEV
If A > 0 Then ' ČE JE SPREJETO VEČJE OD 0 SE ZAPISUJE V
Rs_rxbuffer(irs_rx) = A ' POLJE Rs_rxbuffer
If A = 13 Then ' irs_rx = KAZALEC KAM SE ZAPIŠE SPREJETI ZNAK
Set Rs_rx_flag ' KO JE VSEBINA A = 13 POSTAVI ZASTAVICO DA JE SPREJET STRING ALI DATOTEKA
Lcd "*" ' V VEDNOST DA SI SPREJEL 13
End If
Incr Irs_rx
' Lcd Chr(a)
End If
'*****************************************************************************
' SPREJETI ALI ODDANI STRING ALI DATOTEKA SE MORA OBVEZNO ZACETI ALI KONČATI Z {013}{010}
|
_________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
 |
kose19 Član


Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.18 Kraj: okolica Kobarida
|
Objavljeno: Sob Jun 13, 2009 10:16 pm Naslov sporočila: |
|
|
Napredujem! Na način kot je predlagal joze sem dosegel, da mi en c kliče drugega ko pritisnem tipko, se drugi odzove in mu odgovori.
Bom povezal na enega masterja dva ali tri slave in preko terminala shranjeval v datoteko podatke. Če bo vzorec v 99% pravilen je to to. _________________ - Absens, carens -
- Tisti, ki ga ni, bo prikrajšan - |
|
Nazaj na vrh |
|
 |
kose19 Član


Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.18 Kraj: okolica Kobarida
|
Objavljeno: Pon Jun 22, 2009 9:28 am Naslov sporočila: |
|
|
Dela!  _________________ - Absens, carens -
- Tisti, ki ga ni, bo prikrajšan - |
|
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
|