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 

Čudna UART težava
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
program_er
Član
Član



Pridružen-a: Sob 08 Mar 2008 13:47
Prispevkov: 2173
Aktiv.: 10.33
Kraj: Maribor (Pohorje)

PrispevekObjavljeno: Ned Dec 14, 2008 2:33 pm    Naslov sporočila:  Čudna UART težava Odgovori s citatom

Pozdravljeni!

Naletel sem na zanimivo in prav smešno težavo:

Programiram ATmego8 v Bascom-AVR. Malo se "igram" z serijsko komunikacijo. In v Bascom AVR napišem del kode:
Koda:

Wait 2

  Asci = 061
  Print Asci
  Asci = 61
  Print Asci

  Asci = 0

 Print "Prpravljen?"
  Do
   Asci = Inkey()
    If Asci > 0 Then
     Print Asci
     Print Chr(asci)
    End If
  Loop Until Asci = 27

...


Naložim v čip in gledam terminal (ne Bascomov, ampak en drugi) in v terminalu se izpiše:
Koda:

61
61
Prpravljen?


Odpišem: A

Vrne mi:
Koda:

95
_


Potem še za B in C.

Potem je v terminalu:
Koda:

61
61
Prpravljen?
95           
_             
47
/
94
^

95 in _ je A, 47 in / je B, 94 in ^ je C -- To je po terminalovo!
41 in A je A, 42 in B je B, 43 in C je C -- To je po Bascomu. Tako je prav.

Torej očitno je, da imata Bascom in Terminal v1.9b by Br@y++ različno Ascii tabelo, kar je zelo čudno! Kako naj to rešim? Ima še kdo kaki Terminal? Da poiskusim različne verzije.

Drugače pa komunikacija poteka brez problemov. Vse kaj je z številkami, Print ukazi, deluje normalno in brez napak! Tako da povezava ni kriva!

Hvala za odgovore in predloge!

_________________
Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
siljo
Član
Član



Pridružen-a: Tor 28 Okt 2003 8:08
Prispevkov: 1035
Aktiv.: 4.37
Kraj: Ribn'ca

PrispevekObjavljeno: Ned Dec 14, 2008 6:11 pm    Naslov sporočila:   Odgovori s citatom

41 42 43 je po hex tabeli in ne desetiško!
glej tudi:
http://www.asciitable.com/


Če ponavljaš tipkanje, ti vedno napiše enako?

_________________
Lep pozdrav!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
drVrh
Član
Član



Pridružen-a: Sre 20 Feb 2008 20:17
Prispevkov: 918
Aktiv.: 4.35
Kraj: Slovenija-Koroska-Prevalje-Lese

PrispevekObjavljeno: Ned Dec 14, 2008 6:58 pm    Naslov sporočila:   Odgovori s citatom

Za program_er - ja

V Windows pojdi v Start > iskanje > Datotek ali map > napiši v iskalno polje HyperTerminal pa imaš terminal ki je odličen!

_______________________
Kako pa bi recimo naredil v Bascomu tako da bi mi z if stavkom primerjalo poslane podatke iz računalnika v MCU primer: poslal bi celo besedo ne pa črko namreč z črko znam z besedo ne recimo primer kode:

    '_______________________________________________________________
    ' Pametna hiša Bascom koda za vpis v mikrokontroler AT89C2051 '
    ' Grega Močnik, avtor, 14.12.2008, 14:37
    '_______________________________________________________________

    'Deklaracija inicializacija in ostale potrebne nastavitve:

    $crystal = 14000000
    $baud = 9600
    Declare Sub Pozdravni Izpis
    Declare Sub Kontr. Toplote
    Declare Sub Odklep / Zaklep
    Dim Rad1 As Byte
    Dim Rad2 As Byte
    Dim Rad3 As Byte
    Dim Rad4 As Byte


    '______________________________________________________________
    'Pozdravni izpis

    Sub Pozdravni Izpis

    Print " Lep pozdrav v nadzornem sistemu pametne hiše "
    Print " Lahko začneš upravljati na levi so kontrole za kontroliranje toplote na"
    Print " desni pa kontrole za zaklepanje in odklepanje "

    End Sub
    '_____________________________________________________________


    Sub Kontr. Toplote

    Rad1 = Inkey
    If Rad1 = 110 Then
    Print " Radiator 1 je vklopljen "
    P1.0 = 1

    End If
    End Sub


To je en del te komunicaije in tam ko je krepko označeno kako bi sprejel rad1 ker tista 110 je tam kar tako na blef!

Namreč da še razložim zakaj, v Visual C++ sem sprogramiral svoje terminalno okno in rad bi da bi to upravljal z gumbom ne pa z direktno termilnim izpisni okencem (upam da razumete kaj želim povedati) za zdaj imam samo okno ki je na sredi moj temrinal, bi lahko nekako naredil neko pretvorbo če je ta gumb pritisnem potem pošlji črko x na primer? Ali kako ? Sicer to mi ni najbolj jasno kako to narediti! (shranjevanje v buffer itd...)

_________________
Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
program_er
Član
Član



Pridružen-a: Sob 08 Mar 2008 13:47
Prispevkov: 2173
Aktiv.: 10.33
Kraj: Maribor (Pohorje)

PrispevekObjavljeno: Ned Dec 14, 2008 9:50 pm    Naslov sporočila:   Odgovori s citatom

siljo je napisal/a:
Če ponavljaš tipkanje, ti vedno napiše enako?


Da. Če je eno desetiško, druga pa hexadecimalno, kako pa bi terminal in čip oz. Bascom "sinhroniziral" da bi obadva računala ali v hex oziroma desetiškem formatu?

drVrh je napisal/a:

V Windows pojdi v Start > iskanje > Datotek ali map > napiši v iskalno polje HyperTerminal pa imaš terminal ki je odličen!


A ima Vista tudi to? Ker ne najde Confused

_________________
Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.


Nazadnje urejal/a program_er Ned Dec 14, 2008 9:57 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
program_er
Član
Član



Pridružen-a: Sob 08 Mar 2008 13:47
Prispevkov: 2173
Aktiv.: 10.33
Kraj: Maribor (Pohorje)

PrispevekObjavljeno: Ned Dec 14, 2008 9:55 pm    Naslov sporočila:   Odgovori s citatom

Se mi že dozdeva - komunikacija deluje OK in mega8 ni čisto nič kriva. To kar sprejme, to mi odda nazaj.

Težava je v terminalu: On čipu ukaz pošlje v decimalni obliki, čip ga (misleč da je HEX) lepo sprejme in pošlje nazaj - terminal pa misli, da ga je poslal nazaj v HEX obliki in tako pride do komplikacij! Zdaj moram nekako narediti da: ali terminal pošilja v HEX obliki ali pa čip sprejema v decimalni obliki.

_________________
Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.27
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jun 08, 2010 12:05 pm    Naslov sporočila:   Odgovori s citatom

Na Atmega88 se mi je pojavila velika težava. Vezje sem izdelal, sprogramiram procesor vse deluje le UART se nič ne oglaša. Priklopil sem osciloskop na Tx pin (31. pin na TQFP32 ohišju) vendar se nič ne dogaja. Z Bascomovega "helpa" sem skopiral spodnjo kodo ter spet poizkusil vendar brez uspeha še vedno ni nič na Tx pinu. Hardwersko je vredu, zato sumim da je napaka softwarska. Sem tudi poizkusil sprogramirati kot Atmega8 takrat na Rx pinu dobim +5V (verjetno zaradi notranjega pull-up upora) in pa poizkusil sem softwarski UART na ta ista pina in spet brez uspeha. Bi kdo vedel kje je napaka (upam da ni kaj z fuse biti kot pri megi16 in LCD Confused )

Koda:

$regfile = "m88def.dat" 'Define your own

$crystal = 8000000                                         

$baud = 19200                                             

 

Do

  Print "Hello World"

  Waitms 25

Loop



 

End

_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.27
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jun 08, 2010 2:16 pm    Naslov sporočila:   Odgovori s citatom

Pravkar sem stestiral drugo kodo na Atmega8 in deluje vse tako kot mora. Ali je potrebno pri megi88 vklopiti UART ali je že nastavljen v privzeto?

Ta koda deluje tako kot mora na atmega8:
Koda:
$crystal = 8000000

$baud = 19200

 

Dim Akey As Byte  'Here we declare a byte variable

 

Print

Print "Hello, hit any alphanumerical key..."

Akey = Waitkey()  'Waitkey waits untill a char is received from the UART

Print Akey

 

Wait 1

Print

Print "Thanks!, as you could see the controller prints a number"

Print "but not the key you pressed."

 

Wait 1

Print

Print "Now try the enter key..."

Akey = Waitkey()

Akey = Waitkey()

Print Akey

 

Print

Print "The number you see is the ASCII value of the key you pressed."

Print "We need to convert the number back to the key..."

Print     'Notice what this line does

Print "Please try an alphanumerical key again..."

Akey = Waitkey()

Print Chr(akey) 'Notice what this does

Print "That's fine!"

 

Wait 1

Print

Print "For a lot of functions, just one key is not enough..."

Print "Now type your name and hit enter to confirm"

 

Dim Inputstring As String * 12          'Declare a string variable here

 

 

Do

Akey = Waitkey()

If Akey = 13 Then Goto Thanks           'On enter key goto thanks

   Inputstring = Inputstring + Chr(akey) 'Assign the string

Loop

 

Thanks:

Print "Thank you " ; Inputstring ; " !"             'Notice what ; does

 

Wait 1

Print

Print "Take a look at the program code and try to understand"

Print "how this program works. Also press F1 at the statements"

Print

Print "If you understand everything continue to the next experiment"

 

End


_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.27
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jun 09, 2010 12:05 pm    Naslov sporočila:   Odgovori s citatom

Res nobeden ne pozna rešitve Question

Mislim da ne bi bilo dobro če bi že drugič odspajkaval kontroler s ploščice. Upam da ni zadnja možnost zamenjava z Atmega8.

Sem pa uspel nekaj z softwerskim UARTom na pina (ki jih uporabljam) sem določil Rx Tx in glej ga zlomka deluje problem pa je v tem da mi potem vezje ne deluje tako kot mora ker se vmešava UART.

_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



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

PrispevekObjavljeno: Sre Jun 09, 2010 7:22 pm    Naslov sporočila:   Odgovori s citatom

Uporabljajte RS232 pod interupti pa gre vse kot po olju.



Koda:



Dim Rx_fifo(20) As Byte                 'SPREJEMNI BUFFER  obdeluješ jih kot bayte
Dim Rx_fifo_string As String * 20 At Rx_fifo Overlay       'SPREJEMNI BUFFER  obdeluješ kot string
Dim Rs_rx_flag As Bit
Dim Rs_rx As Byte                       ' INDEX LOKACIJE
Dim I As Byte
Dim A As Byte
Dim B As Byte

On Urxc Rec_isr                                             'define serial receive ISR
Enable Urxc

Rs_rx = 1
Enable Interrupts

'*******************************************************************************
Do
   
   '
   If Rs_rx_flag = 1 Then
      Reset Rs_rx_flag
      For I = 1 To rs_rx
          Lcd Hex(rx_fifo(i))   ' v kolikor imaš alfanumerični lcd display
      Next I
      Rs_rx = 1
   End If
Loop

'****************** SERIAL INTERRUPT SERVICE RUTINE **************************
Rec_isr:

  A = Inkey()
  If A > 0 Then
'     Lcd Chr(a)
     Incr Rs_rx
     Rx_fifo(rs_rx) = A
     If A = 13 Then Set Rs_rx_flag
  End If
Return


_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.27
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jun 10, 2010 7:03 am    Naslov sporočila:   Odgovori s citatom

Zanimiva tale koda. Vidim da uporabljaš nek pol avtomatski bascom način. Jaz sem imel vklopljene interupte (sicer ne pri zgornjih dveh kodah) ker sem tudi hotel uporabiti INT0 in INT1 pa mi ni delovalo. Sumim da ima ta atmega88 neke čudne težave z prekinitvami in uartom.

Bom poizkusil še z " Urxc " da vidim razliko. Kako pa bi nadomestil " print " ukaz?

Drugače pa še vedno upam da bomo našli rešitev ker res nočem odstranjevati TQFP32 čipa (že drugič) pa še polakirano ploščico imam.

_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2104
Aktiv.: 8.88
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jun 10, 2010 7:33 am    Naslov sporočila:   Odgovori s citatom

Kateri/kakšen oscilator uporabljaš?
Kako imaš nastavljene fuse bite?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



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

PrispevekObjavljeno: Čet Jun 10, 2010 7:40 am    Naslov sporočila:   Odgovori s citatom

Običajno ima probleme programer ne pa SW. Pripeta koda je kar avtomatska ter dela ok v programih kjer je vklopljenih več interupov intx, timerx itd. Ukaz Print lahko nadomestiš z ukazom printbin ko pošiljaš npr. podatke:



Koda:


      Rs_txbuffer(1) = temperatura1
      Rs_txbuffer(2) = temperatura2
      Rs_txbuffer(3) = napetost2
      Rs_txbuffer(4) = &H04
      Rs_txbuffer(5) = &H05
      Rs_txbuffer(6) = "O"
      Rs_txbuffer(7) = "K"
      Rs_txbuffer(8) = 13         ' 13 (CR) OBVEZN0 POSLATI NA KONCU

      Printbin  Rs_txbuffer(1) ; 8  ' Rs_txbuffer je oddajni buffer, (1) od kod naj pošilja, 8 koliko znakov




prijetno delo.

_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



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

PrispevekObjavljeno: Čet Jun 10, 2010 7:58 am    Naslov sporočila:   Odgovori s citatom

Za drVrh:

srx je sprejemni buffer

Koda:

if Left(srx , 7) = "tempx_1" Then xx
if right(srx , 7) = "tempx_1" Then xx
if mid(srx , 7) = "tempx_1" Then xx


primeri delajo v Bascom AVR ne vem kako pa bodo delali v Bascomu.

_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.27
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jun 10, 2010 2:52 pm    Naslov sporočila:   Odgovori s citatom

int47 je napisal/a:
Kateri/kakšen oscilator uporabljaš?
Kako imaš nastavljene fuse bite?


Oscilator je notranji 8MHz fuse biti pa so privzeti za mego88.

rudiP je napisal/a:
Običajno ima probleme programer ne pa SW...


SW ne deluje če ga programer ne popravi Smile . Jaz še vedno sumim privzete nastavitve M88 ker mi pri nobeni kodi ne deluje INTx ter UART kot pravim deluje le softwerski UART ta pa mi ne ustreza.

Sem tudi že ročno nastavljal Tx na izhod in Rx na vhod vendar še vedno ni delovalo (nič na izhodu).

_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rudiP
Član
Član



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

PrispevekObjavljeno: Čet Jun 10, 2010 4:57 pm    Naslov sporočila:   Odgovori s citatom

Pripeta koda oz najave imajo premalo parametrov. Pripni še kaj več, pa ti bomo skušali pomagati. Tudi kristal ni pravi za pravo hitrost prenosa. Probaj še na najnižjo hitrost npr. 1200bodov
_________________
Lep pozdrav iz Kopra Rudi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 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: 491 dni


Powered by phpBB © 2001, 2005 phpBB Group