BL12864G kijelző kezelés

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00
Tartózkodási hely: Budapest IX. ker

HozzászólásSzerző: HPMaster » 2012. április 23. hétfő, 19:30

Így néz ki a program:

Kód: Egész kijelölése

$regfile = "m16def.dat"
'$regfile = "m32def.dat"
$crystal = 8000000

Config Portd.6 = Output
Config Adc = Free , Prescaler = Auto
Config Graphlcd = 240 * 128 , Dataport = Portc , Controlport = Portb , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8
Config Int0 = Rising
Config Int1 = Rising
Config Timer1 = Timer , Prescale = 256
Stop Timer1
Timer1 = 34285
Start Adc

Enable Int0
Enable Int1
Enable Timer1
Enable Interrupts

On Timer1 Pulse:
On Int0 Hall_m:
On Int1 Hall_k:



Dim X As Byte
Dim Y As Byte
Dim I As Word
Dim J As Word
Dim I2 As Byte
Dim I3 As Byte
Dim Hely1 As Byte
Dim Hallnumber_m As Word
Dim Hallnumber_k As Word
Dim Rps_k As Word
Dim Rps_m As Word
Dim Rpm As Word
Dim Tapfesz As Single
Dim Szoveg As String * 3
Dim In0 As Word
Dim Megtett_ut As Word
Dim Mehet As Bit
Dim Seb As Byte
Dim Useb As Word
Dim Fordulat As Word
Dim R As Word
Dim Uford As Word
Dim Nullazva As Bit

Declare Function Szamol(n As Word) As Byte
Declare Sub Digitwrite(kiirando As Byte , Hely As Byte)
Declare Sub Fordwrite(kiirando As Byte)
Declare Sub Megtettut
Declare Sub Analogmeres



'Clear the screen will both clear text and graph display
Cls
Cursor Off

Set Portd.6
Waitms 200
Reset Portd.6
Waitms 200
Set Portd.6
Waitms 200
Reset Portd.6


Start Timer1
Line(143 , 1) -(143 , 15) , 255
Line(142 , 1) -(142 , 15) , 255
Showpic 216 , 76 , Kmh
Useb = 255
Uford = 255

'====================================================================
'=======================  F Ő P R O G R A M  ========================
'====================================================================
Do
 '--------  Digitszámkiratás
   Seb = Szamol(rps_k)
   Locate 3 , 1 : Lcd "seb: " ; Seb ; "km/h    "

 If Mehet = 1 Then
   Useb = Seb

'   Reset Nullazva
   If Seb < 10 Then
      I2 = Seb
      Hely1 = 0
      Call Digitwrite(i2 , Hely1)
   End If

   If Seb >= 10 Then
      I2 = Seb / 10
      Hely1 = 1
      Call Digitwrite(i2 , Hely1)
      I2 = I2 * 10
      I3 = Seb - I2
      Hely1 = 0
      Call Digitwrite(i3 , Hely1)
   End If
 End If


 '--------------------------------------------
 '------- Fordulatszámcsíkkirajzolás ---------
 '--------------------------------------------
 If Mehet = 1 Then
   Fordulat = Rps_m * 60
   R = Fordulat / 5.2084
   If R > 238 Then R = 238

   For J = 1 To 239
      Pset J , 1 , 0
      Pset J , 2 , 0
      Pset J , 3 , 0
   Next J
   For J = 1 To R
      Pset J , 1 , 255
      Pset J , 2 , 255
      Pset J , 3 , 255
   Next J

'   Locate 6 , 1 : Lcd "Ford: " ; Fordulat ; "rpm      "
   Uford = Fordulat
'   Locate 7 , 1 : Lcd "Rpm_m: " ; Rps_m ; "   Rpm_k: " ; Rps_k ; "     "
 End If




 If Mehet = 1 Then
   'Cls
   Call Analogmeres
   Call Megtettut
 End If



 Reset Mehet

Loop
End
'====================================================================
'====================================================================
'====================================================================







'Sebesség kirajzolás digitális számjegyekkel
Sub Digitwrite(kiirando As Byte , Hely As Byte)
Local N As Byte
   If Hely = 0 Then
      N = 160
   Else
      N = 105
   End If
   Select Case Kiirando
      Case 0 : Showpic N , 25 , Nulla
      Case 1 : Showpic N , 25 , Egy
      Case 2 : Showpic N , 25 , Ketto
      Case 3 : Showpic N , 25 , Harom
      Case 4 : Showpic N , 25 , Negy
      Case 5 : Showpic N , 25 , Ot
      Case 6 : Showpic N , 25 , Hat
      Case 7 : Showpic N , 25 , Het
      Case 8 : Showpic N , 25 , Nyolc
      Case 9 : Showpic N , 25 , Kilenc
   End Select
End Sub

'Tápfeszültség mérés-kijelzés
Sub Analogmeres
   In0 = Getadc(0)
   Tapfesz = In0 * 0.0048828125
   Tapfesz = Tapfesz * 2
   Szoveg = Fusing(tapfesz , "#.#")
   Locate 13 , 1
   Lcd "Tap: " ; Szoveg ; "V"
End Sub

'Megtett út kijelzése
Sub Megtettut
  Megtett_ut = Rps_k * 0.41                                 '1.65m a kerék kerülete
  Locate 4 , 1 : Lcd "Ut: " ; Megtett_ut ; "m"
End Sub


'Sebesség számítása
Function Szamol(n As Word) As Byte
Local Sebesseg As Single
Local W As Single
Locate 4 , 1 : Lcd N ; "   "
   W = 6.283185 * 0.26                                      'W (omega) = 2 * PI * r (fordulatszám)
   Sebesseg = W * N                                         'v = W * n
   Sebesseg = Sebesseg * 3.6
   Szamol = Sebesseg
End Function



'Időzítőmegszakítás 1s-onként
Pulse:
   Stop Timer1
   Rps_m = Hallnumber_m
   Hallnumber_m = 0
   Rps_k = Hallnumber_k
   Hallnumber_k = 0
   Timer1 = 34285
   Set Mehet
   Start Timer1
Return

'Motor HALL szenzor megszakítás
Hall_m:
   Incr Hallnumber_m
   'Locate 3 , 1 : Lcd "1"
   Gifr = 64
Return

'Kerék HALL szenzor megszakítás
Hall_k:
   Incr Hallnumber_k
   Gifr = 128
Return



'--------------------------------------------------------------------
'---------------------------  K É P E K  ----------------------------
'Pajy:
'$bgf "pajy.bgf"
'Master:
'$bgf "master.bgf"

Nulla:
$bgf "0.bgf"
Egy:
$bgf "1.bgf"
Ketto:
$bgf "2.bgf"
Harom:
$bgf "3.bgf"
Negy:
$bgf "4.bgf"
Ot:
$bgf "5.bgf"
Hat:
$bgf "6.bgf"
Het:
$bgf "7.bgf"
Nyolc:
$bgf "8.bgf"
Kilenc:
$bgf "9.bgf"
Kmh:
$bgf "kmh.bgf"


Persze adódhatnak benne érdekességek... de a java szerintem nem kellene, hogy befolyásolják a kijelzést.

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 896
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. április 23. hétfő, 19:40

Ezt így nem tudom ugyebár fordítani, mert nincsenek meg a bgf-ek, ha az általam írt konfig-portolással lefordítod és átküldöd, akkor le tudom tesztelni, hogy itt mit követ el.
SW/HW stack mennyi most?
JAni

Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00
Tartózkodási hely: Budapest IX. ker

HozzászólásSzerző: HPMaster » 2012. április 23. hétfő, 20:55

240x128graph_kijelzo.zip néven feltöltve a közösbe bgf-ekkel + bas-al együtt

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3348
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. április 23. hétfő, 21:54

Nálam fut!
8)

Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00
Tartózkodási hely: Budapest IX. ker

HozzászólásSzerző: HPMaster » 2012. április 24. kedd, 5:16

Köszönöm kolega Úr!

Akkor viszont elektronika hiba lehet.

Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00
Tartózkodási hely: Budapest IX. ker

HozzászólásSzerző: HPMaster » 2012. április 24. kedd, 6:42

Tettem a kijelző reset kivezetéséhez is felhúzó ellenállatot.
Tettem 12MHz-es kvarcot a procira.

Olyan hibajelenség van, hogy a pixelterületen kívül is jelenik meg vízsintes csík (jobb és bal oldalt is). Mitől lehet ez, hogy a pixel bevezető sávja is "világít"???
8O

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 896
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. április 24. kedd, 7:42

csinálj róla képet, okulásképpen.
Pontosan hol is van az a ZIP?
JAni

Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00
Tartózkodási hely: Budapest IX. ker

HozzászólásSzerző: HPMaster » 2012. április 24. kedd, 7:50

Fájl csere-bere

Úgy látom, hogy leáll a proci menet közben. az lehetséges?
Tettem bele egy INCR X sort amit kiiratok a kijelző egyik sarkába, és azon látom, hogy lelassul olykor meg is áll a proci :(

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3348
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. április 24. kedd, 8:33

Hali HPMaster!

Próbáltad a „glcdRA6963.LBX” használni?
Nálam javított „„glcdRA6963.LIB” el fut a programod.
Csak hiányzik a megfelelő HW kiépítés hozzá!
És elég lassú a nagy bgf-ek kirajzolása.


Én nem találtam megfelelő doksit erről az LCDről!
:?:

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 896
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. április 24. kedd, 8:44

Átportolás meg ADC-k kihagyása után (nálam a PORTA-n van a kijelző) a programod tökéletesen működik.
Különben, amikor a kvarcra céloztam, akkor én a kijelzőn lévő kvarcra vagy kerámiarezonátorra gondoltam, hogy az vacak vagy kontakthibás. Az okozhat leállást, de a programodban is, mivel a program várja a READY jelet. Persze csak tipp...
No, meg nekem T6963 van a kijelzőmön, de már nagyon kíváncsi vagyok arra az RA-sorozatra. Majd csak lesz egyszer...
JAni

Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00
Tartózkodási hely: Budapest IX. ker

HozzászólásSzerző: HPMaster » 2012. április 24. kedd, 9:08

A kijelző új, nem hinném, hogy az zakkant.
Azonban mit jelent az, hogy a program várja a READY jelet??

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 896
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. április 24. kedd, 9:10

Anno régi félbemaradt autóműszerfal project demo:
Béna, meg félkész, de a mienk :)
http://data.hu/get/5028433/SAM_1420.MP4
31mega.
(kikapcsoltam a backligh-ot, de így meg tükröződik benne a fél lakás, de azért látszik valami)

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 896
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. április 24. kedd, 9:14

READY-jel:
Amikor a kijelző kontrollere kész az adatfogadásra, akkor egy bitet bebillent. Minden LCD művelet azzal kezdődik, hogy kiolvassa a status-regisztert, nézi ezt a bitet, ha bebillent, akkor löki az adatokat. No, ha a kijelző elkolbászol, akkor nem kapja a uC a jelet, így ott fagyizik. Más megoldásoknál akkora időzítést tesznek a programba, hogy biztosan hosszabb legyen, mint a leghosszabb LCD művelet, így nem kell figyelni ezt.
Jobb rutinokban a READY jel figyeléséhez betesznek egy számlálót, ami pörög, és ha elfogy, akkor ERROR-al visszamegy a rutin, már hogy a kijelző nem válaszol, tehát mondjuk egy kijelző hiba vagy kábelszakadás miatt a főprogram ne álljon le.

Avatar
HPMaster
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2008. március 10. hétfő, 6:00
Tartózkodási hely: Budapest IX. ker

HozzászólásSzerző: HPMaster » 2012. április 24. kedd, 9:23

Akkor hogyan tudnám orvosolni ezt a hibát? Nem egészen tiszta. Bocsi :oops:

Amúgy a procim timere sem egészséges ahogy észre vettem. Tettem a főprogramba az egyik IF Mehet = 1 feltételbe e gy Toggle PORTD.6 -ot, amin egy led van.

Ennek hatására a LEDemnek kb 1s-os sebességgel kellene villognia. De elég rapszódikus :evil:

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 896
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. április 24. kedd, 9:30

Ha a táp stabil, nincs vezetékhiba, akkor végül megpróbálnám azt, hogy kijelző levesz, a programot $SIM-el lefordítani, akkor nem fordul be a READY várakozás és villogtatnék egy LEDet. Ha akkor az jó, akkor tuttira a kijelző kavar be. Ha akkor is vacak, akkor külső órajelet adnék neki (oszcillátorkocka, FUSE-bitek átállítva EXT clk-ra). Ha javul, akkor kvarc kontakthiba (uC), de említetted, hogy belső órajelről is hajtottad, akkor is rosszalkodott...
HW/SW stack-et felvenném még nagyobbra, ha eddig nem történt meg.
Hirtelen ennyi. Persze, gondolom, a Kapu által átvésett módosításokat megcsináltad a LIB-ben az időzítések miatt.
Talán még az órajel megadásakor hazudnék a fordítónak, hogy mondjuk 24MHz-ről megy és csak 8MHz-ről járatnám, hogy jól megnyúljanak a beépített időzítések.


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: Bing [Bot] valamint 2 vendég