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 / 1212
(#) 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 (») Feb 21, 2025 /
 
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 (») Feb 21, 2025 /
 
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 (») Feb 22, 2025 /
 
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 (») Feb 22, 2025 /
 
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 (») Feb 22, 2025 /
 
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 (») Feb 22, 2025 / 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 (») Feb 23, 2025 /
 
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 (») Feb 25, 2025 /
 
Sikerült megoldani. Működik, jó lett! Köszönöm a Közösségnek!
(#) sanya hozzászólása Feb 27, 2025 /
 

Mesterséges inteligencia C kód

Sziasztok ,
kipróbáltam a mesterséges inteligencia C kód írási képességét.A fealadat az volt hogy :
pic 16f819 microprocesszor , az RA0 bement aktív alacsony állapotában kapcsolja be az RB3 kimenetet.
Ezt produkálta:
  1. #include <xc.h>
  2.  
  3. // Konfigurációs bitek beállítása (PIC16F819-hez)
  4. // Belső oszcillátor, 8MHz, RA6 és RA7 I/O
  5. #pragma config FOSC = INTOSCIO  // Belső oszcillátor, RA6 és RA7 I/O-ként használható
  6. #pragma config WDTE = OFF       // Watchdog Timer kikapcsolva
  7. #pragma config PWRTE = ON       // Power-up Timer bekapcsolva
  8. #pragma config BOREN = ON       // Brown-out Reset engedélyezve
  9. #pragma config LVP = OFF        // Low-voltage Programming kikapcsolva
  10. #pragma config CPD = OFF        // Data EEPROM memóriavédelem kikapcsolva
  11. #pragma config WRT = OFF        // Program memória írásvédelem kikapcsolva
  12. #pragma config CP = OFF         // Program memóriavédelem kikapcsolva
  13.  
  14. // Késleltető függvény (milliszukundum)
  15. // A 8MHz-es belső oszcillátorhoz hangolva
  16. void delay_ms(unsigned int ms) {
  17.     unsigned int i, j;
  18.     for (i = 0; i < ms; i++) {
  19.         for (j = 0; j < 199; j++); // Finomhangolva 8 MHz-hez (199)
  20.     }
  21. }
  22.  
  23. void main(void) {
  24.  
  25.     // Belső oszcillátor 8MHz-re állítása
  26.     OSCCONbits.IRCF = 0b111; // 8MHz (HFINTOSC)
  27.  
  28.     // Portok inicializálása
  29.     TRISA = 0b00000001; // RA0 bemenet, a többi RA kimenet
  30.     TRISB = 0b11110111; // RB3 kimenet, a többi RB bemenet
  31.     PORTB = 0x00;       // RB port alapállapotba állítása
  32.  
  33.     // Fő ciklus
  34.     while (1) {
  35.         // RA0 állapotának ellenőrzése
  36.         if (RA0 == 0) { // RA0 aktív alacsony, azaz 0
  37.             RB3 = 0;   // RB3 negált, kikapcsolása (0)
  38.         } else {        // RA0 magas (1)
  39.             RB3 = 1;   // RB3 negált, bekapcsolása (1)
  40.         }
  41.  
  42.         // Opcionális késleltetés a debounce miatt
  43.         //delay_ms(10);
  44.     }
  45. }

Lefordítottam HEX.re és betöltöttem.
NEM MŰKÖDIK.
Ránézésre jó lehetn , vajon mi a hiba benne ?
Sanya
A hozzászólás módosítva: Feb 28, 2025
Moderátor által szerkesztve
(#) Bakman válasza sanya hozzászólására (») Feb 28, 2025 /
 
Adatlap, 5.1-es pont:
On a Power-on Reset, the pins PORTA<4:0> are configured as analog inputs and read as ‘0’.

  1. ADCON1=0b0110;


Ugyan nincs használva a delay_ms függvény, de ha lenne is, valószínűleg az sem működne. A for ciklusokon belül nincs semmi, az optimalizásás során a fordító egyszerűen kidobja ezeket a részeket, mert minek pörögni a semmin.
(#) Bakman válasza Bakman hozzászólására (») Feb 28, 2025 /
 
Elnézést, ez a helyes:
  1. ADCON1bits.PCFG=0b0110;
(#) sanya válasza Bakman hozzászólására (») Feb 28, 2025 /
 
Köszönöm hozzáadtam a ADCON1=0b0110; utasítást .
Így már kezeli a bementet.
Szuper
Sanya
(#) wincso hozzászólása Szo, 14:14 /
 

pic18f15k80 beágyazott webserver változó értékadás probléma

Sziasztok!
Segítsetek nekem légyszi, hogyan lehet megoldani, hogy egy pic18f25k80 és esp8266 wifi eszköz, beágyazott webszerverben, micro c- nyelvben , a html codban megadni a pic által kezelt változó értékét?
konkrétan a lenti kódban szeretnép a pic analog bemenetén mért értéket hozzáadni az AN1 változóhoz.

"<script> var AN1 ;</script>
<script>document.write(AN1);</script>"
(#) tki válasza wincso hozzászólására (») Szo, 21:44 / 1
 
Nem ismerem az adott környezetet és hogy mire szolgál a weblapon a JS kód, de a html oldal változó részeit futás közben, a html oldal lekérésekor szokták előállítani. Egy változó megjelenítéséhez nem kell JavaScript, csak be kell szúrni a kívánt helyre az oldalon.

Ha ez a string, amit mutattál, erre a célra szolgál, ez lesz visszaadva egy függvényben az oldal tartalma, html kódjaként (esetleg head és body tag-ek közt, amik már talán most is léteznek az előző és következő sorokban), akkor printf()-et érdemes használni, ami az aktuális értéket szöveggé, vagyis stringgé alakítja).

Például:
  1. sprintf(html_code_buf, "A hőmérséklet: %i", AN1);

Nem tudom, milyen formátumban van a hőmérséklet, a fenti függvény előjeles egész számként fogja kiírni az AN1 értékét, de ez egyáltalán nem biztos, hogy helyes.

Tehát pl. ezt is be lehet szorítani egyetlen sprintf-be, csak legyen elég nagy a buffer, és persze sortörések nélkül, csak így olvashatóbb. A magyar ékezetek meg valószínűleg a Celsius fok-karakter is rendben lesznek, ha a szövegszerkesztő is UTF-8-ban menti a fájlt:
  1. sprintf(buf,
  2.    "<!DOCTYPE html>
  3.    <html lang=\"hu-HU\">
  4.    <head>
  5.      <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />
  6.      <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />
  7.      <title>A ... hőmérséklete</title>
  8.    </head>
  9.    <body>
  10.      A hőmérséklet: %d ℃
  11.    </body>", AN1);

A belső idézőjeleket úgy mondják, hogy "ki kell escape-elni", vagyis egy-egy backslash karaktert eléjük rakni, ahogy a példában van.
A hozzászólás módosítva: Szo, 21:53
(#) wincso válasza tki hozzászólására (») Vas, 10:15 /
 
Szia, köszönöm a segítséget, de nem bírok vele.
az 5.sorban kéne kijönnie a"<script> var AN8 = "INT érték" </script>"kodnak, de nem jön.

ez a kodrészlet :
"Send_Web_Page (head, ch_id, 0);

sprintf(buff,"<script> var AN8 = %d </script>", sziv_be_h);

Send_Web_Page (buff, ch_id, 0);
Send_Web_Page (indexpage, ch_id, 1); "


ez jön ki a webserverről:
"<HTML>
<HEAD>
<title>Villany Kaz�n</title>
</HEAD>
7n%�
<BODY style="background-color:powdergray;">
<form name="put" method="get">
<h1 align=center style="color:red;background:yellow;">Olymp f�t�s vez�rl�</h1>
<center>
<tr>"
(#) tki válasza wincso hozzászólására (») Vas, 11:46 /
 
Úgy néz ki, az a "7n%�" lehet az sprintf kimenete, ami a head és a body közt van. Ez leginkább konstans string - nem konstans string probléma lehet, hogy a közelebbről meg nem határozott Send_Web_Page függvény, amit a weben sem találtam, tehát nyilván saját, mit képes feldolgozni, így ennyiből nem tudom megmondani.
(#) wincso válasza tki hozzászólására (») Vas, 12:02 /
 
Itt vannak a fájlok, sajnos nem én írtam őket
(#) tki válasza wincso hozzászólására (») Vas, 14:23 /
 
Ezt nem vállalom - nem erről szól a topic, másfelől nem az van a fájlokban, mint amiről beszéltünk, ill. amivel kezdted. Az alábbi hívások mindenesetre biztosan nem jók, ez nem hiszem, hogy lefordul, mert a karakter és a string két külön típus:

  1. void Send_Web_Page (const char *packet, char ch_id_, char closed);
  2. ...
  3. char buffer_1 ;
  4. ...
  5. inttostr(sziv_be_h, buffer_1);
  6. Send_Web_Page (buffer_1, ch_id, 0);
Következő: »»   1211 / 1212
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