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   584 / 1210
(#) nedudgi válasza McAdams hozzászólására (») Okt 27, 2014 /
 
Közelebb is kapható. Sajnos csak sárgászöld színben hozzáférhető.
A hozzászólás módosítva: Okt 27, 2014
(#) cross51 válasza McAdams hozzászólására (») Okt 27, 2014 /
 
A piccolo projekt LCD vezérlés részében találsz 8bites 4bites példát az LCD-hez, fő különbség a lábszám ami a vezérléshez kell és a minimum várakozási idő 4bit 2x160µs 8bit 160µ(persze ez adott utasításnál nagyobb is lehet).
Ahogy látom ennek a háttérvilágítása 4.2V 200mA 5V-ra 4Ohm a minimum.
(#) foxi63 hozzászólása Okt 27, 2014 /
 
Hali!
Szerintem tipikusan 42usec a várakozási idő, parancsoknál, írás/olvasásnál 46usec.
Kétsoros 162B van nekem, egy kis trükkel pedig 2usec re redukáltam le, mert sokalltam azt a felesleges 440 utasításnyi várakozási időt karakterenként.
(#) zenetom válasza foxi63 hozzászólására (») Okt 27, 2014 /
 
Szia!
A Hitachi HD44780 adatlapban az írásra 37+4 usec van megadva, de most nem ez a lényeg, hanem az maximális idő, tehát annál lehet kevesebb. Viszont a 2 usec nem biztos hogy mindig elég lesz. Vagy olvasod a busy flaget? Mert ha igen, akkor nem szóltam.
(#) McAdams válasza cross51 hozzászólására (») Okt 27, 2014 /
 
Köszi! Már rajzolom is a nyákot.... egyszer bizti kész lesz
(#) foxi63 válasza zenetom hozzászólására (») Okt 27, 2014 /
 
Nem saját ram buffer van a főprogi ciklikusan (31msec) kirak 1 betűt és már rohan is tovább.
A saját buffer törlése is elenyésző idő semmilyen lcd parancsot nem kell kitenni. egyedül sorvégeken kell 46usec időt várni (be kell írni az uj sor címét)
(#) zenetom válasza foxi63 hozzászólására (») Okt 27, 2014 /
 
Jaaa, azt hittem, hogy 2 usec telik el két karakter között.
Hát igen, "nagyban" így is kell csinálni (illetve a legszebb megoldás a busy flag olvasása, de ki engedi meg magának azt a luxust.. ).
De azért a ~40usec nem olyan sok idő. A 440 utasítás ennyi idő alatt 44MHz Fosc mellett darálódik le (ha el nem számoltam magam...). Mihez kell ekkora sebesség?
(#) foxi63 válasza zenetom hozzászólására (») Okt 27, 2014 /
 
Nem kell ekkora sebesség, de 2 stepper motor vezérlés lcd kezelés lebegőpontos számolás , billentyűzet , komparátorok és külső megszakítás előtolás vezérlésének számítása ....
Elgonolkodtam, hogy amikor gyorsan kéne reagálni valamire és épp 16 karater kiírása van folyamatban miért is kell várni majd 1mS időt.feleslegesen.
A program úgy van felépítve, hogy az egyes funkciók egy-egy jelzőbitre indulnak el. tehát a főprogram csak azt a rutint hívja meg ami "aktív" frissítésre vár. tehát a 10-15 feladat áttekintése
pár usec az egyes rutinok sem hosszúak, de az lcd kilógott a sorból.
Egyébként saját kíváncsiságom volt.
(#) Pali79 hozzászólása Okt 28, 2014 /
 
A mellékelt programmal van egy olyan gondom, hogy a CCP megszakításokból számított érték az LCD kijelzőn össze vissza ugrál. Próbáltam úgy is, hogy egy másik PIC-kel állítottam ellő egy kb 10 Hz-es négyszögjelet és az kötöttem a CCP bemenetre, de akkor is 000 és 021 ugrál nagyon gyorsan.
Számtalanszor átnéztem a programot, de nem találom a hibát. Próbáltam Mplab szimulátorban, de nem lettem okosabb. Próbáltam Proteusban is, de az meg semmit nem csinál.
A hozzászólás módosítva: Okt 28, 2014

CCP_1.2.asm
    
(#) Hp41C válasza Pali79 hozzászólására (») Okt 28, 2014 /
 
Már többször javítottam a programodban az alábbi részt:
  1. VEGE:  
  2.         movfw   S_TEMP                          ;W = STATUS regiszter elmentett értéke
  3.         movwf   STATUS                          ;a STATUS regiszter értékének visszaállítása
  4.         movfw   W_TEMP                          ;a W_TEMP értékének bitcseréje
  5.         retfie                          ;visszatérés a megszakításból

Itt az a bökkenő, hogy a movf utasítás állítja a STATUS regiszter Z bitjét.
  1. VEGE:  
  2.         movfw   S_TEMP                          ;W = STATUS regiszter elmentett értéke
  3.         movwf   STATUS                          ;a STATUS regiszter értékének visszaállítása
  4.         swapf           W_TEMP,f                                ;a W_TEMP értékének bitcseréje
  5.         swapf           W_TEMP,w
  6.         retfie                          ;visszatérés a megszakításból

A swapf viszont nem változtat a nagy nehezen visszaállított STATUS értéken.

  1. org 0x800

Ezzel csak a problémákat hozod magadnak. A 0x800 -on kezdődő rutinok már az 1. program lapra kerülnek, a híváskor / visszatéréskor a PCLATH regiszter is kezelni kellene, valamint a megszakítás kezelőben is foglalkozni kellene a PCLATH -val.
Javaslom inkább az
  1. org 0x700

használatát.
A hozzászólás módosítva: Okt 28, 2014
(#) Pali79 válasza Hp41C hozzászólására (») Okt 28, 2014 /
 
Köszönöm! A swapf -et értem, javítom. Az org 0x800 csak maradvány, egy nagyobb programból vágtam ki ezt a részt. Ki is veszem belőle. Egyébként is ez a szövegkiíró rész csak az induláskor hajtódik végre.
Ezek közül valamelyik okozhatta a hibajelenséget?
(#) Hp41C válasza Pali79 hozzászólására (») Okt 28, 2014 /
 
Mindkettő katasztrofális eredményhez vezethet, de nem biztos, hogy ezek okozzák az összes problémát.
(#) don_peter hozzászólása Okt 28, 2014 /
 
Srácok, ha használom az USB modult és bootloadert is, akkor nem tudom a PIC-ben lévő programot védeni?
Olvasás elleni védelemre gondolok elsősorban.
18F4550.. (gyári michrochip bootloader)

Azért kérdezem mert minden, kivéve a táblázat védelme, be van kapcsolva még is simán ki tudom olvasni a programot USB-n keresztül..
  1. #if defined(MCHPUSB_BOOTLOADER)     // A Boot blokkba csak ez a bootloader fér bele!
  2.         #pragma config CPB      = ON    // Boot Blokk kódvédelem bekapcsolva
  3. #else
  4.          #pragma config CPB      = ON   // Boot Blokk kódvédelem kikapcsolva
  5. #endif
  6. #pragma config CPD      = ON
  7. #pragma config WRT0     = ON       // Írásvédelem bekapcsolva
  8. #pragma config WRT1     = ON
  9. #pragma config WRT2     = ON
  10. #pragma config WRT3     = ON
  11. #if defined(MCHPUSB_BOOTLOADER)
  12.         #pragma config WRTB     = ON    // Boot Blokk írásvédelem bekapcsolva
  13. #else
  14.         #pragma config WRTB     = ON   // Boot Blokk írásvédelem kikapcsolva
  15. #endif
  16. #pragma config WRTC     = OFF
  17. #pragma config WRTD     = OFF
  18. #pragma config EBTR0    = OFF       // Táblázatolvasás ne legyen letiltva
  19. #pragma config EBTR1    = OFF
  20. #pragma config EBTR2    = OFF
  21. #pragma config EBTR3    = OFF
  22. #pragma config EBTRB    = OFF       //Boot blokk táblaolvasás ne legyen letiltva

Ha a Táblázatolvasást is próbáltam, de ha tiltom, akkor nem indul el a program..
Előre is köszi..
A hozzászólás módosítva: Okt 28, 2014
(#) Hp41C válasza don_peter hozzászólására (») Okt 28, 2014 /
 
Ez egy jó ördögi kör:
Ha bekapcsolod a TBLRD kiolvasási védelmet, akkor nem tudja a boot loader eldönteni, hogy a program már be van töltve illetve nem tudja ellenőrizni a programozását. Ha ki van kapcsolva, akkor pedig az ellenőrzés miatt a kiolvasás is lehetséges. Úgy lehet védekezni, hogy a főprogram, ha újraprogramozást kér, törli saját magát (vagy egy részét). Ez a törlő rutinnak a boot loader részének kell lenni, a boot loader memória területén. Ezt a programrészletet kell akkor is hívni a boot loared kiszolgáló előtt, ha más módon aktivizálják a boot loader -t (csatlakoztatáskor gomb lenyomva). Így, ha le lehet indítani a fő programot, akkor a boot loader funkciói elérhetetlenek, ha nem, akkor már nincs mit kiolvasni.
(#) don_peter válasza Hp41C hozzászólására (») Okt 28, 2014 /
 
Puff neki, akkor ennek annyi is..
A gyári bootloader alig fér bele még MPLAB-os optimalitással együtt is a megadott területére, nem hogy még plusz törlő rutint írni hozzá.
Iszonyatosan ki van számolva a bootloader szóval ez nem megvalósítható.
Főként azért is mert, ha ezt így megírom és véletlen a felhasználó véletlen rosszul, vagy nem megfelelően indítja a bootloadert, akkor azonnal beletöröl ezzel kinyírja saját magát.
Főleg akkor, ha p. nincs meg neki a program hex fájlban... Szép lenne
Akkor a bootloadert ki húzom a listáról...
Köszi..
(#) Hp41C válasza don_peter hozzászólására (») Okt 28, 2014 /
 
A 18F2550 / 18F4550 -ben 8k-t véd a boot protect konfigurációs bit. A PICkit2 USB boot loader -e nem tesz ki 4k -t sem.
(#) matheattila válasza foxi63 hozzászólására (») Okt 28, 2014 /
 
Ezért vannak a megszakítások...hogy ne mindent a főprogram végezzen...
Minden fontosabb dolgot a megszakításokban kell elintézni (vagy csak egy flag-et beállítani LCD esetén).
(#) nedudgi válasza matheattila hozzászólására (») Okt 28, 2014 /
 
Nem jól állsz a dologhoz. A megszakítás lényege, hogy a főprogram dolgozhasson, ne fecsérelje az idejét olyan alantas dolgokra, mint egy periféria kiszolgálása. A megszakítás a lehető legkevesebb ideig tartson, a főprogram pedig csak akkor várjon egy eseményre, ha nagyon muszáj. A megszakítás pedig csak akkor indulhat el, ha minden erőforrás rendelkezésére áll.
A hozzászólás módosítva: Okt 28, 2014
(#) icserny válasza Hp41C hozzászólására (») Okt 28, 2014 /
 
Idézet:
„A 18F2550 / 18F4550 -ben 8k-t véd a boot protect konfigurációs bit.”

Az adatlap szerint CONFIG5H CPB bitje (Boot Block Code Protection bit) a 000000-0007FFh Boot block-ot védi. Ez szerintem nem 8k, hanem 2k, amibe csak az MCHPUSB bootloader fér bele. A HID bootloader viszon kétszer ekkora (a 4k-ba csak az -O1-nél magasabb szintű optimalizálással fér bele).
(#) icserny válasza don_peter hozzászólására (») Okt 28, 2014 / 1
 
A Diolan már évekkel ezelőtt közzétett egy nyíltforrású USB HID bootloadert ami állítólag mindenféle védelmet biztosít (pl. a felhasználóknak kiadott firmware letöltése XTEA titkostással folyik, ami a visszafordítás ellen is véd). Ha érdekel, nézd meg itt: Diolan USB PIC bootloader
(#) matheattila válasza nedudgi hozzászólására (») Okt 28, 2014 /
 
Már meg se haragudj, de tudom, hogy mit beszélek (nem kis programokat írtam eddig, többek között egy saját fejlesztésű 100MHz-es USB-s oszcilloszkópot is) és tudom, hogy miből áll egy megszakítás lekezelése (hogy a lehető legröbidebb kell legyen, stb.) ezért is írtam azt amit írtam, csak lehet kicsit férreérthetőre sikeredett mivel sihettem és nem volt időm regényeket írni. Ezért elnézést is kérek, és ezentúl nem szólok hozzá semmihez, csak gyorsan végiggörgetem a kommenteket...
(#) Hp41C válasza icserny hozzászólására (») Okt 28, 2014 /
 
Mivel az USB boot loader hosszabb, mint 2k, a CP0 területét is beleértettem a tartományba...
Egyébként a PICkit2 HID boot loader most hajszálra 3k, de lehetne még kivenni belőle...
(#) matheattila válasza (Felhasználó 15355) hozzászólására (») Okt 28, 2014 /
 
Még nincs teljesen befejezve, és sajnos egyéb okok miatt félbemaradt a fejlesztés, de amint lesz időm megint vele foglalkozni meg fogom majd osztani veletek
(#) nedudgi válasza matheattila hozzászólására (») Okt 28, 2014 /
 
Én is tudom, mit beszélek. Kicsivel több, mint negyven éves a programozó diplomám.
Nem vitattam érdemeidet, ha úgy érzed, sajnálom. Mindössze az általad leírtaktól némileg eltérő szemléletről tettem említést.
(#) matheattila válasza (Felhasználó 15355) hozzászólására (») Okt 28, 2014 /
 
simpi: Rendben, az ADC egy MAX1198-as

nedudgi: Értem, sajnálom, hogy kicsit túlreagáltam a dolgot, de nem szeretném tovább vitatni, mert ez már nagyon OFF
(#) don_peter válasza icserny hozzászólására (») Okt 28, 2014 /
 
Köszönöm, igazából próbáltam egy pár másik nyílt forrású USB bootloadert, de azok meg nem akartak menni win7ttel.
Nézegetem az oldalt, de itt le lehet tölteni a bootloader forrást?
Win programot megtaláltam, de a forrást nem és ahogyan látom 2009-es dolog és azokkal próbálkoztam előtte, de a win7-el nem ment..
(#) icserny válasza Hp41C hozzászólására (») Okt 29, 2014 /
 
Idézet:
„CP0 területét is beleértettem a tartományba...”

Igen, úgy stimmel.
(#) icserny válasza don_peter hozzászólására (») Okt 29, 2014 / 1
 
Idézet:
„Nézegetem az oldalt, de itt le lehet tölteni a bootloader forrást?”
Szerintem egy csomagban letöltődik minden. Én sohasem foglalkoztam vele, de gondolom, a kibontott ZIP-ben az fw mappa a firmware forráskódját rejti (ASM!), az fw_update pedig a PC program forráskódját. Kicsit igazítani kell rajta, mert "gyárilag" PIC18F4455-hez van konfigurálva.
(#) don_peter válasza icserny hozzászólására (») Okt 29, 2014 /
 
Értem, köszi..Rápillantok.
(#) vandorbot hozzászólása Okt 29, 2014 /
 
Következő a feladat:

A PIC egyik lábán ki kell adjon egy kb. 8 KHz frekvenciájú 50% kitöltési tényezőjű négyszöjelet.
Ehhez képest a másik lábán nyomógombokkal +- irányban változtatható késéssel szintén ugyanolyan négyszöget és a 3. lábán is.
A 2. és a 3. lábon lévő négyszögek fáziskülönbsége a referenciához képest külön állítható kell legyen. Az sem baj, ha a fáziseltérések egy kijelzőn megjelennek.
Hogyan a legegyszerűbb ezt megvalósítani ?
Következő: »»   584 / 1210
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