www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

branje na UART in prikaz na LCD
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3360
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Sre Maj 14, 2008 7:39 pm    Naslov sporočila:  Uh Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
kose19
Član
Član



Pridružen-a: Sre 02 Mar 2005 19:37
Prispevkov: 1228
Aktiv.: 5.18
Kraj: okolica Kobarida

PrispevekObjavljeno: Pon Jun 08, 2009 10:27 pm    Naslov sporočila:   Odgovori s citatom

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

mi 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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3387
Aktiv.: 15.99

PrispevekObjavljeno: Tor Jun 09, 2009 6:48 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.37
Kraj: Lovrenc na P.

PrispevekObjavljeno: Tor Jun 09, 2009 8:42 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3360
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Tor Jun 09, 2009 9:07 am    Naslov sporočila:  Komunikacija Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
kose19
Član
Član



Pridružen-a: Sre 02 Mar 2005 19:37
Prispevkov: 1228
Aktiv.: 5.18
Kraj: okolica Kobarida

PrispevekObjavljeno: Tor Jun 09, 2009 9:20 am    Naslov sporočila:   Odgovori s citatom

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 Confused

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 Think

_________________
- Absens, carens -
- Tisti, ki ga ni, bo prikrajšan -
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3387
Aktiv.: 15.99

PrispevekObjavljeno: Tor Jun 09, 2009 10:04 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
kose19
Član
Član



Pridružen-a: Sre 02 Mar 2005 19:37
Prispevkov: 1228
Aktiv.: 5.18
Kraj: okolica Kobarida

PrispevekObjavljeno: Tor Jun 09, 2009 10:43 am    Naslov sporočila:   Odgovori s citatom

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 Embarassed ).
_________________
- Absens, carens -
- Tisti, ki ga ni, bo prikrajšan -
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4769
Aktiv.: 20.13
Kraj: Kobarid

PrispevekObjavljeno: Tor Jun 09, 2009 3:14 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MadMax
Član
Član



Pridružen-a: Pet 09 Sep 2005 22:16
Prispevkov: 4743
Aktiv.: 20.02

PrispevekObjavljeno: Tor Jun 09, 2009 4:24 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
joze
Član
Član



Pridružen-a: Pet 26 Jan 2007 10:27
Prispevkov: 204
Aktiv.: 0.91

PrispevekObjavljeno: Tor Jun 09, 2009 7:47 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
kose19
Član
Član



Pridružen-a: Sre 02 Mar 2005 19:37
Prispevkov: 1228
Aktiv.: 5.18
Kraj: okolica Kobarida

PrispevekObjavljeno: Čet Jun 11, 2009 8:34 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1234
Aktiv.: 5.67
Kraj: KOPER

PrispevekObjavljeno: Čet Jun 11, 2009 11:09 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
kose19
Član
Član



Pridružen-a: Sre 02 Mar 2005 19:37
Prispevkov: 1228
Aktiv.: 5.18
Kraj: okolica Kobarida

PrispevekObjavljeno: Sob Jun 13, 2009 10:16 pm    Naslov sporočila:   Odgovori s citatom

Napredujem! Na način kot je predlagal joze sem dosegel, da mi en mi c kliče drugega ko pritisnem tipko, se drugi odzove in mu odgovori. Dancing
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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
kose19
Član
Član



Pridružen-a: Sre 02 Mar 2005 19:37
Prispevkov: 1228
Aktiv.: 5.18
Kraj: okolica Kobarida

PrispevekObjavljeno: Pon Jun 22, 2009 9:28 am    Naslov sporočila:   Odgovori s citatom

Dela! Very Happy
_________________
- Absens, carens -
- Tisti, ki ga ni, bo prikrajšan -
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

 
Pojdi na:  
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