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 

Mega162 UART težava

 
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
rimci
Član
Član



Pridružen-a: Sre 30 Apr 2003 19:01
Prispevkov: 461
Aktiv.: 1.95
Kraj: Prekmurje

PrispevekObjavljeno: Sre Avg 11, 2010 9:20 am    Naslov sporočila:  Mega162 UART težava Odgovori s citatom

Pozdravljeni

Imam težavo pri megi162 pri izpisu na rs232. Isti program na istem vezju z attiny2313 pravilno izpiuje na rs232 medtem ko mi pri mega162 izpisuje "hiroglife". Vem da ima mega162 dva rs232 porta. Izbranega imam pravega saj dovbivam neke podatke iz njega. Probal sem že razne nastavitve z frekvenco oscilatorja (imam izbranega internega), pa različne nastavitve baud, pa vseeno brez uspeha. Kaj bi lahko bilo, a sem kaj spregledal?

Del kode:
Koda:
$regfile = "m162def.dat"
'$regfile = "m32def.dat"
'$regfile = "m8def.dat"
'$regfile = "attiny2313.dat"

'$large
$crystal = 11059200

$baud1 = 9600
$baud = 9600
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             '40

'Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

'Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Open "com2:" For Binary As #1                               'odpremo com2


hvala na pomoči
lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Obelix
Član
Član



Pridružen-a: Pon 19 Maj 2008 13:59
Prispevkov: 1881
Aktiv.: 9.05
Kraj: Maribor

PrispevekObjavljeno: Sre Avg 11, 2010 10:04 am    Naslov sporočila:   Odgovori s citatom

Običajno je frekvenca internega oscilatorja pri Atmegi162 8 MHz. Ti pa imaš v prevajalniku nastavljeno na 11,0592 MHz.

Ali pa poskusi dodati kvarc za 11,0592 MHz.

LpA
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek4
Član
Član



Pridružen-a: Sob 18 Jun 2005 20:52
Prispevkov: 2952
Aktiv.: 12.46
Kraj: Tržič - Mesto med gorami

PrispevekObjavljeno: Sre Avg 11, 2010 10:05 am    Naslov sporočila:  Re: Mega162 UART težava Odgovori s citatom

Koda:
$crystal = 11059200

Citiram:
The calibrated internal RC Oscillator provides a fixed 8.0 MHz clock.


Nekaj ne štima Smile

Hehe. Prepozen Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rimci
Član
Član



Pridružen-a: Sre 30 Apr 2003 19:01
Prispevkov: 461
Aktiv.: 1.95
Kraj: Prekmurje

PrispevekObjavljeno: Sre Avg 11, 2010 10:30 am    Naslov sporočila:   Odgovori s citatom

Sem prej napisal da sem probal z različnimi frekvencami, sedaj sem probal še enkrat z 8MHz pa je zadeva ista. Probal tudi na com2 in je isto.
Koda:
$regfile = "m162def.dat"
'$regfile = "m32def.dat"
'$regfile = "m8def.dat"
'$regfile = "attiny2313.dat"

'$large
$crystal = 8000000

$baud1 = 9600
$baud = 9600
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             '40

'Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

'Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com2:" For Binary As #1                               'odpremo com2


lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Obelix
Član
Član



Pridružen-a: Pon 19 Maj 2008 13:59
Prispevkov: 1881
Aktiv.: 9.05
Kraj: Maribor

PrispevekObjavljeno: Sre Avg 11, 2010 10:54 am    Naslov sporočila:   Odgovori s citatom

Mogoče imaš smolo in je interni oscilator na tvoji Atmegi162 dovolj "mimo" nazivne frekvence.
Poskusi z zunanjim kvarcem.

LpA
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek4
Član
Član



Pridružen-a: Sob 18 Jun 2005 20:52
Prispevkov: 2952
Aktiv.: 12.46
Kraj: Tržič - Mesto med gorami

PrispevekObjavljeno: Sre Avg 11, 2010 11:23 am    Naslov sporočila:   Odgovori s citatom

MEG ne poznam, vendar PICi imajo OSCCON register za konfiguracijo internega oscilatorja.

Narediš pa nekako tako
Koda:
for x = 1 .. 255
 OSCCON = X
 sendUart(x + " Test test...\n")


Ko na računalniku vidiš pravilen text uporabiš tisti OSCCON.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rimci
Član
Član



Pridružen-a: Sre 30 Apr 2003 19:01
Prispevkov: 461
Aktiv.: 1.95
Kraj: Prekmurje

PrispevekObjavljeno: Sre Avg 11, 2010 11:47 am    Naslov sporočila:   Odgovori s citatom

Čudno: ko izberem v fuse bitih externi oscilator (imam 11059200Hz) in sprogramiram kontroler ja zadeva ista kar se tiče izpisa na rs232. Zanimivo pa da LCD dela tudi če vstavim 8MHz kvarz. A je potrebno še kaj v fuse bitih nastaviti?


fuse1 mega162.JPG
 Opis:
 Velikost datoteke:  105.41 KB
 Pogledana:  12 krat

fuse1 mega162.JPG


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rimci
Član
Član



Pridružen-a: Sre 30 Apr 2003 19:01
Prispevkov: 461
Aktiv.: 1.95
Kraj: Prekmurje

PrispevekObjavljeno: Ned Avg 15, 2010 9:23 pm    Naslov sporočila:   Odgovori s citatom

Kar se tiče izpisa na rs232 čakam na novi mikrokontroler, ker sumim na njega. Imam pa eno vprašanje glede programa, ki ga pripenjam tukaj. Program mi do temperature T13 deluje v simulatorju vredu, ko pa merim temeraturo T14 pa mi v podprogramu Branjetemp_i v vrstici Termometer(1) = 1wread(9 , Pind , J) zresetira spremenljivki J in I. Ne uspem razvozlati zakaj. Prosim za pomoč.

Koda:
$sim

$regfile = "m162def.dat"
'$regfile = "attiny2313.dat"

$crystal = 8000000
'$crystal = 11059200

$baud1 = 9600
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space

Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

Open "com2:" For Binary As #1                               'odpremo com2


Dim Termometer(9) As Byte
Dim Temperatura As Integer
Dim J As Integer
Dim I As Integer


Config Lcd = 16 * 2
'Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , Db4 = Portb.4 , E = Portb.3 , Rs = Portb.2       'za attiny2313
Config Lcdpin = Pin , Db7 = Porta.7 , Db6 = Porta.6 , Db5 = Porta.5 , Db4 = Porta.4 , E = Porta.3 , Rs = Porta.2       'za mego162
Cursor Off Noblink
Cls : Locate 1 , 1 : Lcd "DS1820"
'Wait 1


Do
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' in branje termometrov faza 1 - priprava na PORTA D.2 do D.7 :
               For J = 2 To 8
                  If J = 8 Then Gosub Jojo
                  1wreset Pind , J                          ' reset the bus
                  1wwrite &HCC , 1 , Pind , J               ' skip rom
                  1wwrite &H44 , 1 , Pind , J               ' Convert T

                  Gosub Branjetemp_j


Branjetemp_j:

                  1wreset Pind , J                          ' reset the bus
                  1wwrite &HCC , 1 , Pind , J               ' skip rom
                  1wwrite &HBE , 1 , Pind , J               'READ Scratchpad
                  Termometer(1) = 1wread(9 , Pind , J)
                  1wreset Pind , J

                      If Crc8(termometer(1) , 9) = 0 And Termometer(5) = &HFF Then       ' Temperatura pravilno prebrana:

                      Temperatura = Temperatura / 2

                  If J = 2 Then : Locate 1 , 1 : Lcd "T1= " ; Temperatura ; "C"
                     Print #1 , "T1= " , Temperatura , "C"
                  End If
                  If J = 3 Then : Locate 1 , 10 : Lcd "T2= " ; Temperatura ; "C"
                     Print #1 , "T2= " , Temperatura , "C"
                  End If
                  If J = 4 Then : Locate 2 , 1 : Lcd "T3= " ; Temperatura ; "C"
                     Print #1 , "T3= " , Temperatura , "C"
                  End If
                  If J = 5 Then : Locate 2 , 10 : Lcd "T4= " ; Temperatura ; "C"
                     Print #1 , "T4= " , Temperatura , "C"
                  End If
                  If J = 6 Then
                     Print #1 , "T5= " , Temperatura , "C"
                  End If
                  If J = 7 Then
                     Print #1 , "T6= " , Temperatura , "C"
                  End If


                      Else
                           If J = 2 Then : Locate 1 , 1 : Lcd " ***** "
                              Print #1 , "T1 NI SENZORJA*"
                           End If
                           If J = 3 Then : Locate 1 , 10 : Lcd " ***** "
                              Print #1 , "T2 NI SENZORJA*"
                           End If
                           If J = 4 Then : Locate 2 , 1 : Lcd " ***** "
                              Print #1 , "T3 NI SENZORJA*"
                           End If
                           If J = 5 Then : Locate 2 , 10 : Lcd " ***** "
                              Print #1 , "T4 NI SENZORJA*"
                           End If
                           If J = 6 Then : Locate 2 , 10 : Lcd " ***** "
                              Print #1 , "T5 NI SENZORJA*"
                           End If
                           If J = 7 Then : Locate 2 , 10 : Lcd " ***** "
                              Print #1 , "T6 NI SENZORJA*"
                           End If


                      End If

                Next J

Jojo:
                  For I = 0 To 8
                  1wwrite &HCC , 1 , Pinb , I               ' skip rom
                  1wwrite &H44 , 1 , Pinb , I               ' Convert T

                  Gosub Branjetemp_i


Branjetemp_i:

                  1wreset Pinb , I                          ' reset the bus
                  1wwrite &HCC , 1 , Pinb , I               ' skip rom
                  1wwrite &HBE , 1 , Pinb , I               'READ Scratchpad
                  Termometer(1) = 1wread(9 , Pind , I)
                  1wreset Pinb , I

                      If Crc8(termometer(1) , 9) = 0 And Termometer(5) = &HFF Then       ' Temperatura pravilno prebrana:

                      Temperatura = Temperatura / 2

                  If I = 0 Then
                     Print #1 , "T7= " , Temperatura , "C"
                  End If
                  If I = 1 Then
                     Print #1 , "T8= " , Temperatura , "C"
                  End If
                  If I = 2 Then
                     Print #1 , "T9= " , Temperatura , "C"
                  End If
                  If I = 3 Then
                     Print #1 , "T10= " , Temperatura , "C"
                  End If
                  If I = 4 Then
                     Print #1 , "T11= " , Temperatura , "C"
                  End If
                  If I = 5 Then
                     Print #1 , "T12= " , Temperatura , "C"
                  End If
                   If I = 6 Then
                     Print #1 , "T13= " , Temperatura , "C"
                  End If
                   If I = 7 Then
                     Print #1 , "T14= " , Temperatura , "C"
                  End If


                      Else
                           If I = 0 Then
                              Print #1 , "T7 NI SENZORJA*"
                           End If
                           If I = 1 Then
                              Print #1 , "T8 NI SENZORJA*"
                           End If
                           If I = 2 Then
                              Print #1 , "T9 NI SENZORJA*"
                           End If
                           If I = 3 Then
                              Print #1 , "T10 NI SENZORJA*"
                           End If
                           If I = 4 Then
                              Print #1 , "T11 NI SENZORJA*"
                           End If
                           If I = 5 Then
                              Print #1 , "T12 NI SENZORJA*"
                           End If
                           If I = 6 Then
                              Print #1 , "T13 NI SENZORJA*"
                           End If
                           If I = 7 Then
                              Print #1 , "T14 NI SENZORJA*"
                           End If
                      End If
                Next I
Loop
Close #1
End
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
Stran 1 od 1

 
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: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group