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   906 / 1203
(#) Hp41C válasza Firefighter1 hozzászólására (») Márc 6, 2017 /
 
Egyes 4*40 karakteres LCD modulokat két darab 2*40 -esként kell kezelni. Az adat , RW, C/D kivezetések össze vannak kötve már a modulon és két egyedi E kivezetés van rajta.
Ha kedved tartja az adatvezetékeken és a RW, C/D más információ is kiadható vagy beolvasható, ha az LCD -k E bemeneteire alacsony szintet kapcsolsz.
A hozzászólás módosítva: Márc 6, 2017
(#) Firefighter1 hozzászólása Márc 6, 2017 /
 
Kedvem lenne hozzâ, csak tudásom nincs hozzâ.. ugyhogy ez nem az èn projektem lessz!
Talàn majd kèsőbb.
Amugy igen ... különbözö infokat akartam rajta megjeleniteni!
(#) Firefighter1 hozzászólása Márc 6, 2017 /
 
De köszönöm nagyon az informáciokat...
Sajnos èn pic-rt csak flowba tudok programozni...
Esetleg ugy tudom elkèpzelni hogy felvàltva futtatom êk külön makroba a 2 lcd-t ês az E làbat meg külön kapcsolgatom... nem a karora bizom!
Na megyek is a topikjàba ès kèrdezgetek!
(#) Firefighter1 hozzászólása Márc 6, 2017 /
 
Őöö... most egy kicsit megkeveredtem... akkor alacsony szint kell az E bemenetre vagy magas?
(#) attika válasza Firefighter1 hozzászólására (») Márc 6, 2017 /
 
Idézet:
„Ha kedved tartja az adatvezetékeken és a RW, C/D más információ is kiadható vagy beolvasható, ha az LCD -k E bemeneteire alacsony szintet kapcsolsz.”
(#) Firefighter1 válasza attika hozzászólására (») Márc 6, 2017 /
 
Ok csak Pali meg pont az ellenkezőjèt irta.... de akkor alacsony szint a jo!
Köszönöm
(#) Hp41C válasza Hp41C hozzászólására (») Márc 6, 2017 /
 
Hd44780 32. 33. oldal.

Ha kedved tartja az adatvezetékeken és a RW, C/D vonalon más (nem az LCD -nek szóló) információ is kiadható vagy beolvasható, ha az LCD -k E bemeneteire alacsony szintet kapcsolsz.
A hozzászólás módosítva: Márc 6, 2017
(#) pajti2 válasza picipic hozzászólására (») Márc 6, 2017 /
 
Ha írsz rá külön programot csak olvasni az rb3 bemenetet, amit valami kimenetre kiraksz egy próba ledet meghajtani, tudod kapcsolgatni azt a ledet?

A jelzett kapcsolástechnikában nem kellene baja legyen a magas szint érzékeléssel. Esetleg leszedheted azt a 10k-t 1k-ra, de nem kellene gondot okozzon. Talán csak ha elnézted a színkódot, és egy 10 megás ellenállás dolgozik a tranzisztor szivárgási áramára.
(#) Pali79 válasza Firefighter1 hozzászólására (») Márc 6, 2017 /
 
Nem írtam az ellenkezőjét, pont azt írtam mint Hp41C is csak más megközelítésből. De úgy látom nem ártana elolvasnod az LCD-k működéséről szóló cikket: Bővebben: Link és Bővebben: Link
(#) gyoran válasza Firefighter1 hozzászólására (») Márc 6, 2017 /
 
Nos egy kép többet mond mint száz szó.
Ennél az LCD-nél, amit mintának választottam:
E felmegy magas szintre.
Majd megkapja az adatokat.
Utána minimum tDSW időnek el kell telnie.
E lemegy alacsony szintre.
Minimum tH ideig kint kell hagyni az adatokat.
Tehát írásnál tulajdonképpen E lefutó élére zajlik az írás.
Nyilván a többi időzítés is fontos, de szerintem a legtöbbje nem kíván programmozást. Mire a programmod odaér, már elég idő eltelt. De itt érdemes számolgatni.
A hozzászólás módosítva: Márc 6, 2017
(#) picipic válasza pajti2 hozzászólására (») Márc 6, 2017 /
 
Az általad javasolt próba ledet használtam én is. Kidekáztam, hogy merre és miért jár a progi.
A sok próbálgatásnak szerencsére az lett az eredménye, hogy tökéletesen működik. A motorindítási löket lecsengésére 406 mSec is elég lett.

Egyedül a rádiófrekis relét helyettesítő mini nyomógomb nem működik elég megbízhatóan. A távirányítóban lévő relé remélem pergésmentesebb lesz.
Most jön a kipróbálás ténylegesen a függönnyel. A korábbi zsinórfeltekerő hengert is lecseréltem.
Korábbinak az átmérője 26 mm volt, az új 20 mm-es. Ez nagyobb húzóerőt eredményez.
A hozzászólás módosítva: Márc 6, 2017
(#) c27 válasza ktamas66 hozzászólására (») Márc 6, 2017 /
 
Úgy néz ki megtaláltam a hibát. Komplementer üzemmódban nem szereti a PDC ha 0-hoz közeli értékek hullámoznak. Ezért volt mindig csak a komplementer oldal a hibás. Sima szinusz függvényt is próbáltam rajta, ugyan ez a baja, ha tompítom a görbületet a tetején akkor már nem tüskés hiba lesz hanem hullámzik. Ha hagyok kb 5-6% "távolságot" a 0-hoz képest akkor jól működik.
Ettől függetlenül elég szomorú vagyok hogy nem lehet normálisan kihajtani minimumig (gate trafónál nem lenne probléma, de opto meghajtónál előnyösebb volna, úgyhogy lehet trükközni).
(#) usane válasza c27 hozzászólására (») Márc 7, 2017 /
 
Nem olvastam végig a problémádat de ennek a típusnak az errata szerint is van jó néhány gondja a PCPWM moduljával. Nézz bele hátha van valami javaslat ami segít.
(#) pajti2 válasza c27 hozzászólására (») Márc 7, 2017 /
 
Ha nem túl nagy frekivel használod, egy szoftveres pwn sem a világ vége. Vagy lecserélheted a típust olyanra, ami hibamentesebb.
(#) c27 válasza usane hozzászólására (») Márc 7, 2017 /
 
Már olvastam, de mintha ez a jelenség nem szerepelt volna benne. Mindegy legalább már tudom a hiba okát és ez nagyban segít kitalálni valami.

Szoftveres PWM ... azért annyira még nem rossz a helyzet.
A hozzászólás módosítva: Márc 7, 2017
(#) usane válasza c27 hozzászólására (») Márc 7, 2017 /
 
Szerintem a 100% kitöltésre vonatkozó rész az, de mivel nem néztem át a kódod, meg, hogy mit csinál ezért csak a leírásod alapján tippelek. Ha kicsit kilapítod a szinuszt akkor lehet jó lesz.
(#) ktamas66 válasza c27 hozzászólására (») Márc 7, 2017 /
 
Mert mind a 0, mind a 100%-os kitöltés a PWM speciális esete. De mint írtam pl. a bootstrap-es FET meghajtók úgysem szeretik ha az alsó FET nem zár le néha.
(#) Bakman hozzászólása Márc 7, 2017 /
 
Estét!

PIC18F26K80, AN4 -es csatorna. Ha növelem rajra a feszültséget, jóval lassabban reagál, mint kellene. Rajzoltam egy grafikont, hogyan jön vissza az ADC eredménye. Másnál is jelentkezett a gond, megoldás nélkül: Bővebben: Link.

Egy érdekes részlet az adatlapból, lásd melléklet. Nincs TRISA5 igaz, nem tudom, hogy ez mennyire érdekes illetve mennyire függ össze a hibával.

ANCON0=0b 00011111

Valakinek van ötlete, mitől jelentkezhet a hiba? AN0, AN1, AN2 rendben van, AN3 referencia feszültségnek van használva.
(#) ktamas66 válasza Bakman hozzászólására (») Márc 7, 2017 /
 
TRISA5 van, a 4-es nincsen, mivel oda a Vcap-ot kell kötni. Az AN4 az RA5-ös lábon van.
(#) Bakman válasza ktamas66 hozzászólására (») Márc 7, 2017 /
 
Ez szarvas hiba volt tőlem. Így mindjárt más a leányzó fekvése. Köszi!
(#) c27 válasza ktamas66 hozzászólására (») Márc 7, 2017 /
 
Ok, csak ez nem Bootstrap-es. De azért nem hiszem el hogy nem lehet úgy legyártani, hogy működjön. Mindegy valahogy megkerültem, csak nem olyan elegáns és szép megoldás (legalább is nekem).

Egyébként a PWM-nél a postscale mire való? Nem igazán látom semmilyen hatását, megadtam 1:2 és 1:4 is, de semmi látványos változás. Pedig azt hittem hasonló a hatása mint a prescale-nek és a PWM frekijé lehet vele állítani.
(#) ktamas66 válasza c27 hozzászólására (») Márc 7, 2017 /
 
Az az IT utóosztója, hogy hanyadik PWM ciklusra adjon IT-t.
(#) Firefighter1 hozzászólása Márc 8, 2017 /
 
Sziasztok!
Ismeri valaki ezt a 2 programozot?
kis sárga
Illetve ezt a klont

Legalàbbis gondolom hogy csak klone ennyièrt
A hozzászólás módosítva: Márc 8, 2017
(#) Fricu hozzászólása Márc 8, 2017 /
 
Üdv
Van egy assemblyben megírt kis LCD (1602) meghajtó programom P16F84a-ra. Működik a PIC Simulator-on és a valóságban is, a próbapanelen. Szeretném átköltöztetni P16F877a-ra. A konfigurációs részt átírtam, de csak azt, mert ugyanazok portok elérhetők a nagytestvérben is. A PIC Simulátoron le is fut, megjelennek a karakterek, pont, mint a 84a-val, viszont a próbapanelen nem.
Értelemszerűen a hardver ugyan az (ami a 84a-val ment), csak PIC van cserélve és átdugdosva az eltérő lábkiosztás (és szám) miatt. Az Mplab x ide-vel hiba nélkül lefut a fordítás, és hibaüzenet nélküli a feltöltés is. Csak épp nem műkszik.
A pic jó, más programot sikerül rátenni és megy (ledes futófény 8 ledre).
Mit nézzek meg?

  1. TITLE  "lcd4.asm"               ; working with an LCD in the 4-bit mode
  2.  List P=16F877a, R=DEC
  3.  INCLUDE "p16F877a.inc"
  4.  
  5. ; data segment
  6.  CBLOCK 0x00C                  
  7.  del, cmd                               ; variables for passing the parameters
  8.  temp, i                                ; local variables
  9.  ENDC
  10.  
  11. ; code segment
  12.  PAGE
  13.  __CONFIG _CP_OFF  & _PWRTE_ON  & _WDT_OFF & _HS_OSC
  14.  
  15.   org 0                                 ; start program at the beginning of mem
  16.         goto start
  17.  
  18. msg1                                    ; first message to display
  19.         addwf   PCL, f
  20.         dt "  Welcome to", 0
  21.  
  22. msg2                                    ; second message to display
  23.         addwf   PCL, f
  24.         dt "PIC programming", 0
  25.  
  26. start
  27.         bsf     STATUS, RP0             ; change to BANK 1     
  28.         clrf    TRISB ^ 0x80            ; enable RB1-RB7 for output
  29.         movlw   0x7F                    ; enable internal Pull-Ups
  30.         movwf   OPTION_REG ^ 0x80
  31.         bcf     STATUS, RP0             ; back to BANK 0
  32.  
  33.         call    initLCD                 ; initialize LCD display
  34.  
  35. ; output of the top row (msg1)
  36.         clrf    i                      
  37. L1      movf    i, w
  38.         call    msg1                    ; get the next char
  39.         iorlw   0                       ; end of string?
  40.         btfsc   STATUS, Z      
  41.         goto    L2                      ; YES - jump out of the loop
  42.         call    writeDATA               ; NO - send it to LCD
  43.         incf    i, f                    ; update the char index
  44.         goto    L1
  45.  
  46. L2      movlw   0xC0
  47.         call    writeCMD                ; move the cursor to the second line
  48.         clrf    i                       ; clear the index of the second string
  49.  
  50. ; output the bottom row (msg2)
  51. L3      movf    i, w                                   
  52.         call    msg2                    ; get the next char
  53.         iorlw   0                       ; end of string?
  54.         btfsc   STATUS, Z                      
  55.         goto    L4                      ; YES - jump out of the loop
  56.         call    writeDATA               ; NO - send it to LCD
  57.         incf    i, f                    ; update the char index
  58.         goto    L3
  59.  
  60. L4  goto $                              ; endless loop
  61.  
  62.  
  63. ; procedures
  64. initLCD                                 ; initialize LCD right after power up
  65.         movlw   15
  66.         movwf   del
  67.         call    delay                   ; a 15 msec delay after power is on
  68.  
  69.         movlw   3
  70.         movwf   PORTB                   ; start LCD init process
  71.         movlw   5
  72.         movwf   del    
  73.         call    delay                   ; wait for 5 msec      
  74.  
  75.         movlw   3
  76.         movwf   PORTB                   ; start LCD init process
  77.         bsf     PORTB, 4                ; toggle the LCD Enable pin
  78.         bcf     PORTB, 4
  79.         movlw   5
  80.         movwf   del    
  81.         call    delay                   ; wait for 5 msec
  82.  
  83.         bsf     PORTB, 4                ; repeat the reset command (2nd time)
  84.         bcf     PORTB, 4
  85.         movlw   40                      ; wait for 200 usec
  86.         sublw   1
  87.         sublw   0
  88.         btfss   STATUS, Z
  89.         goto    $-3
  90.  
  91.         bsf     PORTB, 4                ; repeat the reset command (3rd time)
  92.         bcf     PORTB, 4
  93.         movlw   40                      ; wait for 200 usec
  94.         sublw   1
  95.         sublw   0
  96.         btfss   STATUS, Z
  97.         goto    $-3
  98.  
  99.         movlw   2                       ; initialize LCD 4-bit mode
  100.         movwf   PORTB
  101.         bsf     PORTB, 4                ; toggle the LCD Enable pin
  102.         bcf     PORTB, 4
  103.  
  104.         movlw   0x28                    ; 2-line mode
  105.         call    writeCMD
  106.  
  107.         movlw   1
  108.         call    writeCMD                ; clear display
  109.  
  110.         movlw   5                       ; wait for 5 msec after clearing
  111.         movwf   del
  112.         call    delay
  113.  
  114.         movlw   0x06                    ; cursor move after each char
  115.         call    writeCMD
  116.  
  117.         movlw   0x0E                    ; turn on LCD and enable cursor
  118.         call    writeCMD
  119.         return
  120.  
  121. writeCMD                                ; write to LCD a 1-byte command in W
  122.         movwf   temp
  123.         swapf   temp, w
  124.         andlw   0x0F                    ; leave only the high 4 bits in W
  125.         movwf   PORTB
  126.         bsf     PORTB, 4                ; toggle the E bit
  127.         bcf     PORTB, 4
  128.        
  129.         movfw   temp                    ; proceed with the low bit
  130.         andlw   0x0F
  131.         movwf   PORTB
  132.         bsf     PORTB, 4                ; toggle the  bit      
  133.         bcf     PORTB, 4
  134.  
  135.         movlw   40                      ; wait for 200 usec
  136.         sublw   1
  137.         sublw   0
  138.         btfss   STATUS, Z
  139.         goto    $-3
  140.         return
  141.  
  142. writeDATA                               ; write to LCD a 1-byte data in W
  143.         movwf   temp
  144.         swapf   temp, w
  145.         andlw   0x0F                    ; leave only the lower 4 bits in W     
  146.         movwf   PORTB
  147.         bsf     PORTB, 5                ; sending data
  148.         bsf     PORTB, 4                ; toggle the E bit
  149.         bcf     PORTB, 4
  150.        
  151.         movfw   temp                    ; proceed with the low bit
  152.         andlw   0x0F
  153.         movwf   PORTB
  154.         bsf     PORTB, 5                ; sending data
  155.         bsf     PORTB, 4                ; toggle the  bit      
  156.         bcf     PORTB, 4
  157.  
  158.         movlw   5                       ; wait for 5 msec
  159.         movwf   del
  160.         call    delay
  161.         return
  162.  
  163. delay                                   ; a delay for del milliseconds
  164.         movlw   200
  165.        
  166.         sublw   1                       ; this loop takes 5us*200 = 1ms
  167.         sublw   0                       ; for PIC16F877 @ 4 Mhz
  168.         btfss   STATUS, Z
  169.         goto    $-3
  170.  
  171.         decfsz  del,f
  172.         goto    delay
  173.         return
  174.  
  175.  end



Remélem látszani fog a kód.
Ötleteket kérek a tapasztaltabb kollégáktól tisztelettel
(#) Hp41C válasza Fricu hozzászólására (») Márc 8, 2017 /
 
Nincs királyi út, töltsd le a két típus adatlapját, olvasd el és hasonlítsd össze őket.
Szembeötlő különbségeket fogsz találni...
Hol kezdődik az általános célú memória? Hogyan lehet a portokat digitális -ra kapcsolni? Van-e a 16F87x -nél más konfigurációs mező, amit be kell állítani? A 16F87x -ben milyen regisztereket használ fel a CBLOCK 0x00C ... endc?
(#) Fricu válasza Hp41C hozzászólására (») Márc 8, 2017 /
 
Ezeket a különbségeket a PIC Simulátor nyilván ismeri (be kell állítani a konkrét PIC típust, frekit, az LCD meghajtását, stb.
Ha azon fut, a próbapanelen miért nem ?
(#) Hp41C válasza Fricu hozzászólására (») Márc 8, 2017 /
 
Mert nincs mögötte a hardware vagy mindenben egyező működésű program.
Visszakérdezek: Miért jó Neked, ha a cblock -kal leforglalt változók nem az általános célú memóriában vannak? A programod a del nevű változót a PIR1 (az 5. és a 4. bit csak olvasható), a cmd nevű változót a PIR2 (a 7., 5., 2., 1. bit nem létezik, mindig 0), a temp nevű változót a TMR1L, az i nevű változót a TMR1H regiszterre helyezi? Nem lenne egyszerűbb kiolvasni az adatlapból, hogy hol kezdődik a GPR? 0x20 -nál.
(#) Fricu válasza Hp41C hozzászólására (») Márc 8, 2017 /
 
Egy szóval sem írtam, hogy az én szerzeményem, mert egyenlőre meghaladja tudásomat sajnos.
Csak használni szeretném egy saját feladat részeként beépítve.
Persze próbálom visszafejteni, mit miért csinál?
A Pic Simulátor mutatja a portokat, regisztereket, azok tartalmát lépésről lépésre, stb. Tehát ismeri a hardvert, ha más pic-et állítok be, nem is lesz kijelzés - kipróbáltam.
Persze az már a hex-et futtatja - ami nyilván más mint a forrás.
Azért ott feszül némi ellentmondás, hogy a szimulátor szerint mennie kellene, de mégsem..
Nem?
(#) icserny válasza Firefighter1 hozzászólására (») Márc 8, 2017 /
 
Idézet:
„Ismeri valaki ezt a 2 programozot?”

A "kis sárga" programozót ismerem, én is vettem belőle.
Én a fejlettebb ICP02-v2 változatát vettem, ami 3,3 V-os PIC-ekhez is jó (az általad belinkelt ICP01 csak 5V-os PIC-ekhez használható!).

Az ICP02 és ICP02 sajnos, csak programozásra használható, hardveres nyomkövetésre nem. Emiatt nem javaslom a megvásárlását.
(#) Hp41C válasza Fricu hozzászólására (») Márc 8, 2017 /
 
Melyik Pic Simulátor -t használtad? Az a tény, hogy a szimulátorban végigmegy a programon még nem jelenti azt, hogy azt csinálja, amit szeretnél.

- A GPR memória a 0x20 címen kezdődik. Ide kellene helyet foglalni a változóidnak.
- A 16F87xA rendelkezik alacsony feszültségű programozási lehetőséggel (LVP). Ahhoz hogy a RB3/PGM lábat digitális I/O -nak lehessen használni, az LVP -t ki kell kapcsolni.
Következő: »»   906 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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