LCD, Single és sűrű mintavételezés megoldása (tekercselőgép)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
ACdrian
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. január 12. hétfő, 7:00

Hozzászólás Szerző: ACdrian »

Lenne egy kis problémám:
Adott egy 2x20 karakteres LCD kijelző, ami másodpercenként kb.10 alkalommal frissíti az adatokat (menetet számol).
- A problémám, hogy ha megszakítás éri kijelzés közben, akkor telefirkálja értelmetlen karakterekkel, ami elég zavaró.
Ha nem használnék megszakítást, akkor a kijelzés ideje miatt nem működhetne a bejövő impulzusok érzékelése, ami létfontosságú.
Van erre valamilyen megoldás?

Az már csak hab a tortán, hogy a "független" PWM kimenetet is megzavarja...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Szerintem a megszakítás rutinban van valami gubanc!?
Látni kellene a programodat!?
:?:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Hanyszor????

A karakteres LCD 2 FPS korul tud :)


A PWM SW vagy HW alapu?
Az LCD kiirast a foprogramba rakd...


Elektronikai hiba is lehet.
Marmint tervezesi, ha ilyen hiba van....
Avatar
ACdrian
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. január 12. hétfő, 7:00

Hozzászólás Szerző: ACdrian »

Ugyanez az áramkör már működött megszakítások nélkül, tehát a tervezési hiba kizárva. Az LCD kb 20mm-re van az ATMEGA32 (DIP tokos) lábaitól.
Hsználtam már 20-50FPS-el is hiba nélkül. A hiba ott kezdődik, amikor bekapcsolom a megszakítást
Majd bemásolok egy programrészletet, ha jó lesz otthon a NET.

Mi a különbség a HW és a SW PWM között (mármint programozásilag)?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

SW PWM: TE állítod elő a PWM-t.

HW PWM: Timerrel és PWM1a= sorral állítod elő, és az értékadás után a háttérben jár, SWből rá se nézel....
Avatar
ACdrian
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. január 12. hétfő, 7:00

Hozzászólás Szerző: ACdrian »

Köszönöm a gyors választ.
Az OC2 lábat használom. Ott is van HW-es PWM?

A kijelzőt továbbra sem értem. Ha nincs megszakítás tökéletesen működik, ha megszakítom telefirkálja a kijelzőt. :!:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

AZ OC2-n lehet mindketto....


De programkod alapjan gyorsanbban tudnek sugni....
Ha prg részlet, az is már sokat segít....
Avatar
ACdrian
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. január 12. hétfő, 7:00

Hozzászólás Szerző: ACdrian »

16óra után indulok csak haza, de a NET nem biztos, hogy működni fog (javítják).

a program valahogy így néz ki:

dim pwmjel as byte

'Értékadás:
OC2=pwmjel
Avatar
ACdrian
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. január 12. hétfő, 7:00

Hozzászólás Szerző: ACdrian »

Szóval a forráskód valahogy így néz ki:
Minden működik, csak a kijelzést firkálja össze.

Dim Gombfel As Byte 'Nyomógomb változó
Dim Gomble As Byte
Dim Gombenter As Byte
Dim Gombesc As Byte

Dim Gombfelr As Byte
Dim Gombler As Byte
Dim Gombenterr As Byte
Dim Gombescr As Byte

Dim Anin As Word 'Analóg input
Dim Anins As Single 'Analóg input
Dim Anin1 As Byte
Dim Elotolas As Single
Dim Ch As Byte 'Aktuális ADC csatorna bekapcsolása
Dim Menetszamlalo As Long
Dim Menet2 As Single
Dim Menet As Long
Dim Str1 As String * 20
Dim Irany As Byte 'Léptetés iránya
Dim Bal As Byte 'bal végállás
Dim Balr As Byte 'bal végállás előző
Dim Jobb As Byte 'jobb végállás
Dim Jobbr As Byte 'jobb végállás előző
Dim Ford As Byte 'fordulat érzékelő
Dim Fordr As Byte 'fordulat előző
Dim Lepford As Word 'lépés/fordulat (200)
Dim Mmford As Single 'fordulatonkénti elmozdulás (1mm M6 menetes szárral)
Dim X As Single 'X irányú elmozdulás számlálása
Dim Xl As Single 'Léptető motor valós elmozdulás számlálása
Dim Xp As Single 'Az x-hez hozzáadandó érték
Dim Xs As Single
Dim Osztas As Word
Dim Lepes As Byte 'Aktuális lépésszám számontartása
Dim Pwmjel As Byte
Dim Kiirtim As Word
Dim Motorfelbontas As Word
Dim Menetemelkedes As Single 'A léptető motor egy fordulatára eső elmozdulás mm-ben
Dim Lepesarany As Single 'Léptetőmotor arányszám : menetemelkedés/Motorfelbontás

'************************************************************
Foprog: 'Főprogram
Ch = 0 'Analóg bemenetek beolvasása
Anin = Getadc(ch)
Waitms 50
' Gosub Beolv Ezt a megszakításnak kell meghívnia!!!
Xp = Elotolas / Osztas '0,15/8=0,01875mm eltolás impulzusonként

If Anin < 20 Then Pwmjel = 0
If Anin > 1000 Then Pwmjel = 255

If Anin >= 20 Then
If Anin <= 1000 Then 'PWM jel kiszámítása (0-255)
Anin1 = Anin - 20
Anins = Anin / 3.828125
Anin1 = Round(anins)
Pwmjel = Anin1
End If
End If
Ocr2 = Pwmjel 'PWM jel kitöltés beállítása
Gosub Gombok
' Gosub Kiir A kiírást is a timer aktiválja
'Waitus 100
If Kiirtim >= 1000 Then
Kiirtim = 0
Gosub Kiir
End If
Goto Foprog
'************************************************************
Beolv: 'Bemenetek beolvasása
Stop Timer1
Kiirtim = Kiirtim + 1
Bal = Pind.4
Jobb = Pind.5
Ford = Pind.6

If Bal <> Balr Then 'bal végállás érzékelés
Balr = Bal
If Bal = 0 Then 'csak a szenzor eltakarásakor jelez
Irany = 1
X = 0
Xl = 0 'A végállás mindig nullázza a számlálót
End If
End If

If Jobb <> Jobbr Then 'jobb végállás érzékelés
If Jobb = 0 Then
Jobbr = Jobb
Irany = 0
End If
End If

If Ford <> Fordr Then 'Fordulat impulzus érzékelés
Fordr = Ford
Menetszamlalo = Menetszamlalo + 1 'Minden állapotváltozásnál hozzá ad 1-et
If Irany = 0 Then X = X + Xp
If Irany = 1 Then X = X - Xp
End If
Timer1 = 65000
Start Timer1
Return
'***********************************************************
Kiir:
Menet2 = Menetszamlalo / Osztas 'Ez adja meg a pontos értéket (pl. 3,25)
Menet = Round(menet2)
Str1 = Str(menet)
Locate 1 , 1
Lcd "Menet:" ; Str1 ; " "
Locate 1 , 14
If Irany = 0 Then Lcd ">> " ; Str(anin) ; " "
If Irany = 1 Then Lcd "<< " ; Str(anin) ; " "
Locate 2 , 1
Lcd "El" ; Chr(5) ; "tol" ; Chr(0) ; "s:" ; Fusing(elotolas , "00.000");
Locate 2 , 15
Lcd "mm"
Return
A hozzászólást 1 alkalommal szerkesztették, utoljára ACdrian 2010. június 22. kedd, 18:52-kor.
Avatar
ACdrian
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. január 12. hétfő, 7:00

Hozzászólás Szerző: ACdrian »

A config lemaradt:

Config Timer0 = Timer , Prescale = 64
Config Timer1 = Timer , Prescale = 1
Config Timer2 = Pwm , Prescale = 8 , Compare Pwm = Clear Down 'OC2 kimenet használata, 15625Hz, alacsonyról indul

'Pwm0a = xxx : Pwm0b = xxx
On Timer1 Beolv:
On Timer0 Leptet:
'On Ovf0 Kiir: 'Túlcsorduláskor a beolv-ra ugrik, így nem kési le a bemenő jelet
Enable Timer0
Enable Timer1
Enable Timer2
'Timer1 = 5000
'Start Timer0
Start Timer1
Start Timer2
Enable Interrupts

Config Watchdog = 2048 'reset 2048 mSec után, ha lefagyna
Config Adc = Single , Prescaler = Auto 'Analóg/DC átalakító beállítása
Start Adc
Avatar
ACdrian
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. január 12. hétfő, 7:00

Hozzászólás Szerző: ACdrian »

Észrevettem még egy érdekes dolgot: Az LCD kijelzőn a szöveg hibátlan, de a számoknál szalad az egész

Így kéne kinéznie:
Menet:12345 >> 512
Előtolás:0.150mm

Ehelyett ilyeneket látni:
Menet:=?3/504%0966 >> 512
Előtolás:0.497mm

Amint kiveszem a programból a megszakításokat, megjavul a kijelzés...
Avatar
ACdrian
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. január 12. hétfő, 7:00

Hozzászólás Szerző: ACdrian »

Kipróbáltam másodpercenkénti frissítéssel is, de a hibajelenség ugyanaz :cry:
Avatar
Franz
DrótVégénSzéndarab
Hozzászólások: 43
Csatlakozott: 2009. május 29. péntek, 6:00

Hozzászólás Szerző: Franz »

Szia ACdrian!
Az eleje is lemaradhatott, ez: $regfile = ?, $crystal = ?? ...
Azt olvasom valahol, hogy Mega32, de milyen frekvecián?
Avatar
ACdrian
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. január 12. hétfő, 7:00

Hozzászólás Szerző: ACdrian »

12MHz-en megy.

$regfile = "m32def.dat"
$crystal = 12000000
$hwstack = 32
$swstack = 10
$framesize = 40

Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Avatar
Franz
DrótVégénSzéndarab
Hozzászólások: 43
Csatlakozott: 2009. május 29. péntek, 6:00

Hozzászólás Szerző: Franz »

A Leptet és a Gombok rutin is hiányzik ebből a kódból.
Talán a végéről. Vagy az a rész nem fontos?
Válasz küldése