 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
int47 Član


Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2104 Aktiv.: 8.88 Kraj: Ljubljana
|
Objavljeno: Čet Jun 10, 2010 9:09 pm Naslov sporočila: |
|
|
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 |
|
 |
LEDuser Član


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

Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 563 Aktiv.: 2.38 Kraj: Ljubljana
|
Objavljeno: Pet Jun 11, 2010 9:37 am Naslov sporočila: |
|
|
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
Opis: |
|
Velikost datoteke: |
28.7 KB |
Pogledana: |
1 krat |

|
Nazadnje urejal/a Vlado Pet Jun 11, 2010 9:39 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
rudiP Član

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

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 5.67 Kraj: KOPER
|
Objavljeno: Pet Jun 11, 2010 9:41 am Naslov sporočila: |
|
|
Ker imaš kristal in baudrate definirane v svojem programu, so te nastavitve mirodajne.
_________________ 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: Pet Jun 11, 2010 10:20 am Naslov sporočila: |
|
|
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 .
_________________ Razsvetljujemo od leta 1920! |
|
Nazaj na vrh |
|
 |
micabauc Član


Pridružen-a: Tor 03 Jun 2003 7:12 Prispevkov: 177 Aktiv.: 0.75 Kraj: Celje
|
Objavljeno: Sob Jun 12, 2010 10:55 pm Naslov sporočila: |
|
|
Pa začni že brati navodila.
RFMF metoda se je še vedno pokazala za zelo uspešno.
|
|
Nazaj na vrh |
|
 |
|
|
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
|