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 Prejšnja  1, 2
 
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
int47
Član
Član



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

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

1. V tem pdf-u pod 8.2.1 Default Clock Source piše:
Koda:

The device is shipped with internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmed, resulting in 1.0MHz system clock.


2. Frekvenca internega RC oscilator-ja lahko preveč odstopa od nazivne.
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: Pet Jun 11, 2010 8:50 am    Naslov sporočila:   Odgovori s citatom

Sem se še malo poigral in opravil nekaj meritvev. Spodnjo kodo sem napisal samo za debug vstavil sem tudi "On Urxc Rec_isr" za test.

Koda:
$regfile = "m88def.dat"
$crystal = 1000000
$baud = 1200

Dim X As Byte
Dim A As Byte

Config Portd.7 = Output
Led Alias Portd.7
Led = 0
Config Pind.2 = Input                                       'reed
Config Pind.3 = Input                                       'tipka

Const Timer1reload = 15625                                  'timer1 1s
Config Timer1 = Timer , Prescale = 64
Load Timer1 , Timer1reload
On Ovf1 Timer1_isr
Enable Timer1
Start Timer1

On Urxc Rec_isr                                             'define serial receive ISR
Enable Urxc

On Int0 Reedgo
Config Int0 = Rising
Enable Int0

On Int1 Tipkago
Config Int1 = Falling
Enable Int1

Enable Interrupts

Do

   Incr X
   Wait 1

Loop

Reedgo:

Print "INT0"
Print "Reed"
Set Led

Return

Tipkago:

Print "INT1"
Print "Tipka"
Set Led

Return

Rec_isr:

  A = Inkey()
  If A > 0 Then
     Print A
  End If

Return

Timer1_isr:

Load Timer1 , Timer1reload

Print X
Toggle Led

Return

End


Koda seveda ne deluje na M88 sem pa presenečen nad delovanjem INT0/1. Ker ste rekli da je mogoče odstopanje oscilatorja preveliko sem v fuse bitih vklopil "CKOUT" ta na portb.0 pošilja frekvenco osilatorja. Z osciloskopom sem pomeril in opazil da pri nastavljenih 8MHz dobim frekvenco 8,333MHz pri vklopljenem "CKDIV8" (notrjanji oscilator / 8 = 1MHz) pa je frekvenca 1,042MHz. Torej je pri obeh primerih odstopanje konstantno +4%.



Baud sem popravil, povsod sem spremenil na 1200. Preko bascom terminala sem poslal znak s tipkovnice in ga tudi prejel na strani Rx na MAX232 (pri priklopljenem vezju). Čas od začetka prejema pa do konca je 7,52ms (pomerjeno z osciloskopom), na Tx pinu pa se ne dogaja nič.



Upam da to kaj pomaga jaz res ne vem kje je napaka. Sem imel tudi težave z attiny13 s timer PWM in sem jih rešil z drugačnim poimenovanjem v bascom kodi, namesto pwm0a -> ocr0a, pwm0b -> ocr0b. Zato sem pomislil da ima tudi M88 drugačno poimenovanje oz. nastavitve kot M8. Žal doma nimam nobene druge M88 da bi poizkusil kodo še tam sem pa poizkusil na M8 in deluje perfektno.

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



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 563
Aktiv.: 2.38
Kraj: Ljubljana

PrispevekObjavljeno: Pet Jun 11, 2010 9:37 am    Naslov sporočila:   Odgovori s citatom

Ali lahko pripneš sliko vezja, shemo in PCB?
Bascom ima tudi simulator, ali si poskusil z njim?
Za komunikacijo se nikoli ne uporablja notranji oscilator, ker se lahko hitro zgodi da ti trenutno deluje potem pa zaradi temperaturnih sprememb komunikacija neha delovati.
Ali si meril na Tx pinu procesorja ali pa na MAX232?

Vlado
Na sliki je baudrate 1200



baud.jpg
 Opis:
 Velikost datoteke:  28.7 KB
 Pogledana:  1 krat

baud.jpg




Nazadnje urejal/a Vlado Pet Jun 11, 2010 9:39 am; skupaj popravljeno 1 krat
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.67
Kraj: KOPER

PrispevekObjavljeno: Pet Jun 11, 2010 9:38 am    Naslov sporočila:   Odgovori s citatom

Delaj postopoma. Prvo speglaj rs232 nato časovne interupte in ostalo. Predlagal sem ti vrstni red katerega lahko zamenjaš po tvoji presoji.

Prilagam ti kodo kakor bi jo sam napisal. Koda ni idealna je upam dobra za učenje.



Koda:


$regfile = "m88def.dat"
$crystal = 1000000                      ' ZA točno SERIJSKO KOMUNIKACIJO ali za pravilne časovne intervale SO TOČNO DOLOČENI KRISTALI
$baud = 1200                            '  npr. 11.0592 Mhz

Dim X As Byte
Dim A As Byte

Config Portd.7 = Output
Led Alias Portd.7
Led = 0
Config Pind.2 = Input                                       'reed
Config Pind.3 = Input                                       'tipka

Const Timer1reload = 15625                                  'timer1 1s
Config Timer1 = Timer , Prescale = 64
Load Timer1 , Timer1reload
On Ovf1 Timer1_isr
Enable Timer1
Start Timer1

On Urxc Rec_isr                                             'define serial receive ISR
Enable Urxc

On Int0 Reedgo                          ' JE  ŠKODA INTERUPTOV SAMO ZA KONTROLO TIPK
Config Int0 = Rising
Enable Int0

On Int1 Tipkago
Config Int1 = Falling
Enable Int1

Dim Reedgo_f As Bit
Dim Tipkago_f As Bit
Dim Rec_isr_f As Bit

Reset Reedgo_f
Reset Tipkago_f
Reset Rec_isr_f

Enable Interrupts
'-------------------------------------------------------------------------------
Do
   If Reedgo_f = 1 Then
      Reset Reedgo_f
      Print "INT0"
      Print "Reed"
      'Set Led  KER NIKJER NE UGAŠAŠ LED SEM NAPISAL TAKO:
      If Led = 0 Then Set Led Else Reset Led
   End If

   If Tipkago_f = 1 Then
      Reset Tipkago_f
      Print "INT1"
      Print "Tipka"
    '  Set Led   KER NIKJER NE UGAŠAŠ LED SEM NAPISAL TAKO:
      If Led = 0 Then Set Led Else Reset Led
   End If

   If Rec_isr_f = 1 Then                ' Pravilno je, da sprejete znake shraniš v polje bajtov
      Reset Rec_isr_f                   ' ko pa dobiš 13 prečitaš buffer in narediš  kar je treba
      Print A                           ' običajno pošlješ string določene dolžine v katerem je
   End If                               ' informacija o stanju priključene naprave ali pa ukaz za nadaljno deluo



   Incr X
   'Wait 1

Loop
'-------------------------------------------------------------------------------
Reedgo:                                 ' vsi dogodki pod interupti se zabeležijo z postavitvijo zastavice

   Set Reedgo_f                         'izvedejo pa se v glavni zanki

Return
'-------------------------------------------------------------------------------
Tipkago:

   Set Tipkago_f

Return
'-------------------------------------------------------------------------------
Rec_isr:                                ' Ni v redu tako, da v interuptu generiraš nov interupt
                                       ' nisi čital mojega posta
                                       ' kar pošiljaš po rs232 končaj s 13 (cr)
  A = Inkey()
  If A > 0 Then
     Set Rec_isr_f
    ' Print A                            ' PORABI PREVEČ ČASA V INTERUPTU
  End If

Return
'-------------------------------------------------------------------------------
Timer1_isr:

Load Timer1 , Timer1reload

'Print X     ' PORABI PREVEČ ČASA V INTERUPTU
Toggle Led

Return
'-------------------------------------------------------------------------------
End


_________________
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.67
Kraj: KOPER

PrispevekObjavljeno: Pet Jun 11, 2010 9:41 am    Naslov sporočila:   Odgovori s citatom

Ker imaš kristal in baudrate definirane v svojem programu, so te nastavitve mirodajne.
_________________
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: Pet Jun 11, 2010 10:20 am    Naslov sporočila:   Odgovori s citatom

Joj ravno ko sem želel spremeniti fuse bite sem bil malo prehiter in zaklenil M88 na vezju. Sem poizkusil že vse (paralelnega programatorja nimam) in ne morem odkleniti. Žal mi sedaj ne preostane nič drugega kot da odlotam M88 in zalotam M8! Lahko da je bil problem v čipu samem ker sem ga uporabil že drugič in sem mogoče že prej kaj odkuril (na izhodnih bufferjih). Sedaj ko MORAM prilotati M8 mislim da bo zadeva delovala brez problema (po mojih testih z M8).

Vseeno hvala vsem za pomoč sem se nekaj naučil poleg vsega še to da bi morali preimenovati M88 v M666 Twisted Evil .

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



Pridružen-a: Tor 03 Jun 2003 7:12
Prispevkov: 177
Aktiv.: 0.75
Kraj: Celje

PrispevekObjavljeno: Sob Jun 12, 2010 10:55 pm    Naslov sporočila:   Odgovori s citatom

Pa začni že brati navodila.

RFMF metoda se je še vedno pokazala za zelo uspešno.
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 -> Osnove programiranja AVR-jev Č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