Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   1211 / 1211
(#) jpocok hozzászólása Feb 14, 2025 /
 

DCF77 - 16F628A - TPIC595

Szevasztok!

Ez itt álmaim órája: végtelenül egyszerű, mégis atom-pontos. Többször megépítettem, szépen működik. Sajnos LCD-kijelzős, ami óriási hiba! Szeretnék valami könnyebben leolvasható 7-szegmensest, például Numitron-t, vagy LED-et. Ugyanakkor viszont NEM szeretem a multiplex vezérlést, így Vicsys Overkill Nixie órája nem jöhet számításba. Legjobb megoldásnak a Shift-regisztert tartom, például a TPIC595-öt.

Pali79 bináris órája tartalmaz egy gombelemes megoldást is, áramszünet esetére. Ez is egy nagyon jó ötlet, mivel a DCF jel beolvasása néha hosszú ideig tart, nálunk viszont gyakoriak az áramszünetek.

Ezen a ponton zsákutcába kerültem, mert nem tudom átírni az ASM programot! Tehát keresem azt a vállalkozó kedvű fórumtársat, akinek ideje és tehetsége volna hozzá, hogy ebben támogasson. Csak a program módosításában, mert a hardver nem probléma.

Úgy gondolom, hogy a részleteket jobb volna privát üzenetekben tisztázni, azután ha már működik az óra, akkor egy cikkben tenném közzé a végleges megoldást. Ugyanis hiába kerestem példákat a Shift-regiszterek ASM programozására 16F PIC-hez, legtöbbször csak C és az is Arduino-hoz érhető el.

Éppen ezért kérek segítséget ilyen formában, mert egyrészt a működő ASM programot szeretném megérteni, másrészt azoknak is átadni, akik hasonló megoldásra vágynak.

Az eredeti program és kapcsolás Uwe Nagel munkája, amit Topi magyarított.

schaltung.gif
    
(#) Hp41C válasza jpocok hozzászólására (») Feb 15, 2025 /
 
A 74HC595 hasonlóan vezérelhető, mint a TPIC595. Rá található példa assembly -ben is.
Using 74HC595 to expand output pins of a PIC microcontroller: Assem... code
(#) jpocok válasza Hp41C hozzászólására (») Feb 15, 2025 /
 
Köszönöm válaszodat! Bár a fotókon nem látható, de ezzel 5 éve már foglalkoztam egyszer. Sajnos ez csak egy példaprogram, fogalmam sincs, hogyan alakíthatnám át az LCD kijelzést.
(#) Pali79 válasza jpocok hozzászólására (») Feb 15, 2025 /
 
Mi a baj a multiplexel?
(#) Hp41C válasza jpocok hozzászólására (») Feb 16, 2025 /
 
Szia!

A programban az alábbi rész írja ki az LCD -re az időt:
  1. ;  0123456789abcdef
  2. ; wenn alterText definiert ist
  3. ; +----------------+
  4. ; |20:03:15 MESZ ##|
  5. ; |Di 01.04.2003 ##|
  6. ; +----------------+
  7. ; sonst
  8. ; +----------------+
  9. ; |20:03:15 MESZ ##|
  10. ; |Di 01. APR 03 ##|
  11. ; +----------------+
  12. ;-- 1. Zeile
  13.         movlw   0x80
  14.         call    write_lcd_comm
  15.         movf    dispStd,w
  16.         call    write_byte
  17.         movlw   ':'
  18.         call    write_lcd_data
  19.         movf    dispMin,w
  20.         call    write_byte
  21.         movlw   ':'
  22.         call    write_lcd_data
  23.         movf    dispSec,w
  24.         call    write_byte
  25.         movlw   ' '
  26.         call    write_lcd_data
  27.  
  28.         movlw   lcd_mez_table-lcd_init_table
  29.         btfsc   dispStat,4
  30.         movlw   lcd_mesz_table-lcd_init_table
  31.         call    lcd_string

A dispStd az órákat, dispMin a perceket és a dispSec a másodperceket tartalmazza 2 difit BCD formában.
  1. ;********************************************************************
  2. write_byte               ; writes a hex-byte
  3.         movwf   temp_byte
  4.         swapf   temp_byte,w
  5.         call    write_nibble
  6.         movf    temp_byte,w
  7.  
  8. write_nibble  
  9.         andlw   0x0f
  10.         addlw   0x06
  11.         btfsc   STATUS,DC
  12.         addlw   0x07
  13.         addlw   0x30-0x06
  14.         goto    write_lcd_data
  15. ;********************************************************************
  16. write_byte               ; writes a hex-byte
  17.         movwf   temp_byte
  18.         swapf   temp_byte,w
  19.         call    write_nibble
  20.         movf    temp_byte,w
  21.  
  22. write_nibble  
  23.         andlw   0x0f
  24.         addlw   0x06
  25.         btfsc   STATUS,DC
  26.         addlw   0x07
  27.         addlw   0x30-0x06
  28.         goto    write_lcd_data

A kiírás két részből áll. Előbb az adatokból a felső nibble-t alakítja ASCII karakterré, beírja az LCD -re (call write_byte) majd az alsó nibble-vel teszi ugyanezt.
Ha át akarod írni TPIC595 -re, akkor előbb azt kellene eldönteni, hogyan csatlakoznak a kijelzők a shift regiszterre.
(#) jpocok válasza Pali79 hozzászólására (») Feb 16, 2025 /
 
Idézet:
„Mi a baj a multiplexel?”

Zavar a vibrálás. Vezetés közben is nagyon kellemetlennek tartom, ha az előttem haladó kocsi LED-es lámpái vibrálnak. Természetesen ezt csak olyankor tapasztalom, amikor megmozdítom a szemem. No de nem nézhetek állandóan ugyanabba az irányba.
Ugyanakkor a Nixie csövek esetén műszakilag sem ajánlott - legalábbis ezt olvasom mindenhol.
(#) jpocok válasza Hp41C hozzászólására (») Feb 16, 2025 /
 
Szia!
Nagyon szépen köszönöm fáradozásodat, ez értékes segítség!
Előbb megpróbálom úgy átalakítani a mintaprogramot, hogy egy hétszegmenses kijelzőre küldje ki a 0-9 számjegyeket. Ennek tesztelésére van egy nagyon jó "univerzális" panelem (mellékelt kép), amit egy évvel ezelőtt egy másik projekthez készítettem. Amint látható, 18-20-28 lábú PIC-hez is jó, illetve a kimenetet is többféle módon lehet variálni (csak 74595, vagy ULN..., vagy UDN..., illetve szükség esetén előtét ellenállásokkal).
Ezután már "csak" azt kell kitalálni, hogyan küldhetek ki 6 digitetet és végül jöhet Uwe Nagel programjának átalakítása az általad küldött segítség alapján.
Köszönöm!
(#) kaqkk válasza jpocok hozzászólására (») Feb 16, 2025 /
 
6*8 bit + latch és már készen is van Ha nem sikerül szólj segítek ...
A hozzászólás módosítva: Feb 16, 2025
(#) Pali79 válasza jpocok hozzászólására (») Feb 16, 2025 /
 
A bináris órám is multiplex. Azóta megcsináltam 7 szegmenses változatban is. Megnéztem szimulátorban a bináris másodpercenként 32300-szor, a 7 szegmenses, 193-szor villan fel 1 másodperc alatt. Nem hinném, hogy bármelyiket is észrevennéd.
(#) kaqkk válasza Pali79 hozzászólására (») Feb 17, 2025 / 1
 
Nekem is hiába mondták hogy finom a spenót sok vas van benne mégis útálom. Ha nem szereti ne akard rábeszélni
(#) Pali79 válasza kaqkk hozzászólására (») Feb 17, 2025 /
 
Dehogy akarom én rábeszélni. Felőlem aztán olyan órát gyárt magának amilyet akar. Csupán megállapítottam, hogy szerintem egy közel 200 Hz-es villogást nem lehet észrevenni.
(#) benjami válasza Pali79 hozzászólására (») Feb 17, 2025 /
 
Ha éppen interferál egy másik hasonló frekvencián működő LED-el akkor azért elképzelhető, hogy zavaró
(#) jpocok válasza Hp41C hozzászólására (») Pé, 19:02 /
 
Szia!
Újabb kérdés merült fel Uwe Nagel programjával kapcsolatban. Az nagyon szép, hogy Uwe több PIC-re is felkészítette a programot, de hogyan választhatok ki ezek közül egyet, mondjuk a 16F628-at? Megpróbáltam lefordítani, de 597 hibát jelzett, amelyek közül az utolsó az volt, hogy nem definiáltam a PIC-et. Gondolom a "maradék" 596 ennek egyenes következménye.

dcf13.asm
    
(#) pipi válasza jpocok hozzászólására (») Pé, 23:19 /
 
Mivel próbálod fordítani?
Ha direktben akkor parancssorban paraméterként adod meg.
Ha "normálisan" csinálsz projekt-et, akkor a projekt létrehozásakor adod meg a pic tipust.
(#) Hp41C válasza jpocok hozzászólására (») Szo, 8:02 /
 
Szia!
Ebben a kódrészben választja ki a kontroller típusát.
  1. #ifdef __16F84
  2. ; configs für 16F84
  3.         __config        _XT_OSC & _WDT_ON & _PWRTE_ON & _CP_OFF
  4.         include <P16F84.INC>
  5. #endif
  6.  
  7. #ifdef __16F84A
  8. ; configs für 16F84A
  9.         __config        _XT_OSC & _WDT_ON & _PWRTE_ON & _CP_OFF
  10.         include <P16F84A.INC>
  11. #endif
  12.  
  13. #ifdef __16F628
  14. ; configs für 16F628
  15.         __config        _XT_OSC & _WDT_ON & _PWRTE_ON & _CP_OFF & _DATA_CP_ON & _MCLRE_OFF & _LVP_OFF & _BODEN_ON
  16.         include <P16F628.INC>
  17. #endif

Ha készítesz egy project állományt a fordításhoz, abban megadod a típust pl: PIC16F628.
A fordítónak ekkor a környezet átad egy szimbólumot __16F628 névvel.
A fenti kódrész a kapott sziblólumot összehasonlítja azon típusokéval, amira a program fel van készítve.
Apropó ki kellene egészítani a 16F628A típussal:
  1. #ifdef __16F628A
  2. ; configs für 16F628A
  3.         __config        _XT_OSC & _WDT_ON & _PWRTE_ON & _CP_OFF & _DATA_CP_ON & _MCLRE_OFF & _LVP_OFF & _BODEN_ON
  4.         include <P16F628A.INC>
  5. #endif
(#) jpocok válasza pipi hozzászólására (») Szo, 8:22 /
 
Köszönöm válaszodat!
Igen, direktben fordítok, tehát Jegyzettömbbel szerkesztem a forrást, majd rádobom az MPASMWIN programra.
Viszont közben eszembe jutott a kézenfekvő megoldás: egyszerűen beírom a program elejére a "PROCESSOR 16F628" sort. Így már hibátlanul lefordítja.
(#) jpocok válasza Hp41C hozzászólására (») Szo, 8:52 /
 
Szia!
Köszönöm részletes és alapos válaszodat!
Sajnos, a project állomány nekem kínai. Pipi-nek adott válaszomban írtam le saját megoldásomat.
De az #ifdef-ek alapján számomra is egyértelmű volt, hogy így állítja be a programot a kiválasztott processzorhoz.
Viszont jó, hogy felhívtad figyelmemet a 628A-kiegészítésre. Ugyanis a későbbi terv, a 16F628 után a 12F629. Uwe erre is írt programot a Pragotron órához, tehát van honnan ötleteket meríteni. Szerintem egy ilyen alkalmazáshoz bőven elegendő a 8 láb és a belső órajel is. Fő, hogy minél egyszerűbb, de atom-pontos legyen!
(#) Hp41C válasza jpocok hozzászólására (») Szo, 12:14 / 1
 
MpLab 8.10 leírás magyarul
Jó régi, de használható a 8.92 -re is.
A 22. oldaltól olvashatól az új project létrehozása. Ha kész a project, már csak két dolgot kell beállítani:
- Az ablak közepén a Debud módot át kell állítani Release -re.
- Az első fordításkor megkérdezi, hogy milyen kódot fordítson. Absolute -t kell választani.

Másik érdekes rész a szimuláció. Próbálgathatod a programot mielőtt beégetnéd. Mintha belelátnál a kontrollerbe.
(#) jpocok válasza Hp41C hozzászólására (») Vas, 13:29 /
 
Köszönöm fáradozásodat!
Kétségtelen, hogy egyszerűbb magyarul (bár nekem az angollal sincs gondom). Viszont vénségemre nem akarok már ilyen bonyolult dolgokba kezdeni, maradok a megszokottnál.
(#) diginewl válasza diginewl hozzászólására (») Kedd, 7:35 /
 
Sikerült megoldani. Működik, jó lett! Köszönöm a Közösségnek!
Következő: »»   1211 / 1211
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem