Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Ned Dec 14, 2008 2:33 pm Naslov sporočila: Čudna UART težava |
|
|
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:
Odpišem: A
Vrne mi:
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 |
|
 |
siljo Član



Pridružen-a: Tor 28 Okt 2003 8:08 Prispevkov: 1035 Aktiv.: 4.37 Kraj: Ribn'ca
|
Objavljeno: Ned Dec 14, 2008 6:11 pm Naslov sporočila: |
|
|
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 |
|
 |
drVrh Član



Pridružen-a: Sre 20 Feb 2008 20:17 Prispevkov: 918 Aktiv.: 4.35 Kraj: Slovenija-Koroska-Prevalje-Lese
|
Objavljeno: Ned Dec 14, 2008 6:58 pm Naslov sporočila: |
|
|
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 |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Ned Dec 14, 2008 9:50 pm Naslov sporočila: |
|
|
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  _________________ 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 |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Ned Dec 14, 2008 9:55 pm Naslov sporočila: |
|
|
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 |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Tor Jun 08, 2010 12:05 pm Naslov sporočila: |
|
|
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 )
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 |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Tor Jun 08, 2010 2:16 pm Naslov sporočila: |
|
|
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 |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Sre Jun 09, 2010 12:05 pm Naslov sporočila: |
|
|
Res nobeden ne pozna rešitve
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 |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 5.68 Kraj: KOPER
|
Objavljeno: Sre Jun 09, 2010 7:22 pm Naslov sporočila: |
|
|
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 |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Čet Jun 10, 2010 7:03 am Naslov sporočila: |
|
|
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 |
|
 |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Čet Jun 10, 2010 7:33 am Naslov sporočila: |
|
|
Kateri/kakšen oscilator uporabljaš?
Kako imaš nastavljene fuse bite? |
|
Nazaj na vrh |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 5.68 Kraj: KOPER
|
Objavljeno: Čet Jun 10, 2010 7:40 am Naslov sporočila: |
|
|
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 |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 5.68 Kraj: KOPER
|
Objavljeno: Čet Jun 10, 2010 7:58 am Naslov sporočila: |
|
|
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 |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Čet Jun 10, 2010 2:52 pm Naslov sporočila: |
|
|
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 . 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 |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 5.68 Kraj: KOPER
|
Objavljeno: Čet Jun 10, 2010 4:57 pm Naslov sporočila: |
|
|
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 |
|
 |
|