12F675 - konfigurace

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Zoufalec

12F675 - konfigurace

#1 Příspěvek od Zoufalec »

Zdravím,
poradil by mi prosím někdo,jak správně inicializovat HW zařízení (viz obrázek).Nějak se mi to nedaří ,zničil jsem už dva PICy.
(Timer nebude použit)
Obrázek
Uživatelský avatar
tandel
Příspěvky: 1488
Registrován: 01 led 2008, 00:00

#2 Příspěvek od tandel »

Něco podobného se tu už řešilo http://www.ebastlirna.cz/modules.php?na ... highlight=
Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 00:00
Kontaktovat uživatele:

#3 Příspěvek od jankop »

Kód: Vybrat vše

;**********************************************************************
;  Author:                   
;**********************************************************************
;    Files required: <P12F675.INC>                                                 
;**********************************************************************
    list      p=12F675          ; definice procesoru, pro ktery je program urcen
    #include <P12F675.INC>      ; definice promnennych daneho procesoru
    errorlevel -302             ; vypnuti nadbytecnych chybovych hlaseni o bankach
; nastaveni konfiguracniho slova podle pozadavku
    __CONFIG  _CP_OFF &_CPD_OFF & _WDT_OFF & _MCLRE_ON &_BODEN_OFF &_PWRTE_ON &_INTRC_OSC_NOCLKOUT
   
;--------- CONSTANTS DEFINITIONS---------------------------------------
    #define     RAM_Start       0x20
;--------- VARIABLE DEFINITIONS ---------------------------------------
    CBLOCK  RAM_Start
w_temp                  ; variable used for context saving
status_temp             ; variable used for context saving
    ENDC
;----------------------------------------------------------------------
 ORG     0x000              ; Processor reset vector
    goto init               ; Go to beginning of program
 ORG     0x004              ; interrupt vector location
    nop
init
    bsf STATUS, RP0         ; Restore Bank 1
    call 0x3FF              ; Get the cal value
    movwf OSCCAL            ; Calibrate
    movlw 0<<GP5|0<<GP4|1<<GP3|0<<GP2|1<<GP1|1<<GP0
    movwf TRISIO
    movlw 0<<ADCS2|0<<ADCS1|1<<ADCS0|0<<ANS3|0<<ANS2|1<<ANS1|0<<ANS0
    movwf ANSEL
    bcf STATUS,RP0          ; Restore Bank 0
    movlw 1<<ADFM|0<<VCFG|0<<CHS1|1<<CHS0|0<<GO|1<<ADON
    movwf ADCON0
    movlw 0x07              ; odpojeni komparatoru CMP
    movwf CMCON             ;       "
    clrf GPIO
    end
Zoufalec

#4 Příspěvek od Zoufalec »

jankop>Děkuji moc,ještě bych se zkusil zeptat co dělá tato část kódu ? (jsem začátečník)

Kód: Vybrat vše

    bsf STATUS, RP0         ; Restore Bank 1 
    call 0x3FF                   ; Get the cal value
    movwf OSCCAL          ; Calibrate
Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 00:00
Kontaktovat uživatele:

#5 Příspěvek od jankop »

Každá 12F675 má od výrobce na adrese 0x3FF uloženu kalibrační konstantu ve formě instrukce RETLW. Je to kalibrace interního oscilátoru 4MHz. Instrukce call 0x3FF ji načte do registru W a z něho se přesune instrukcí movwf OSCCAL do kalibračního registru. Dobré programátory adresu 0x3FF přečtou a doplní ji při programování zpět, špatné ji smažou a pak instrukce call 0x3FF způsobí havárii programu a je třeba kalibraci vypustit. Proto není špatné před prvním programováním přečíst hodnotu na adrese 0x3FF a zapsat si ji. Dělá se to třeba značkami binárně fixem na nožičky PIC. Osm nožiček - osm bitů. Takovou konstantu pak jde kdykoliv zahrnout do programu a obnovit. Říkáš, že jsi zničil dvě PIC. Jak jsi dospěl k závěru, že jsou vadné?
Zoufalec

#6 Příspěvek od Zoufalec »

Tak to jsou pro mě věci úplně nové o kterých jsem neměl ani tušení.
Kalibrační konstanta je pouze u PIC 12F675 ,nebo ji má každý PIC ?
Jak Je tomu u 18F4550 a 16F877A ?

Používám programátor PRESTO.U těch dvou co beru jako "špatné" mi hlásí program presta ,že nelze číst a zapisovat do určité části procesoru.
Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 00:00
Kontaktovat uživatele:

#7 Příspěvek od jankop »

Kalibrační konstantu nemají všechny PIC a má význam pouze v případě použití interního oscilátoru. 18F4550 a 16F877A ji nemají. Software UP-ASIX kalibrační konstantu zálohuje/obnovuje. V případě těch vadných PIC bych je zkusil několikrát smazat. V programu UP nastavit předtím v konfiguraci daného procesoru MCLR jako MCLR nikoliv I/O.
A ještě v nastavení UP Nastavení/Nastavení programu/Programování aktivovat Delší čas pro zapojení napětí při ICSP. Zapnutí i Vybití třeba 30 000 us. A ještě pozor, při programování této malé PIC by neměla být připojena mezi napájecími piny 1 a 8 žádná kapacita.

Respektive, nejlepší metoda by asi bylo nemazat celou PIC, ale zkusit nejprvě několikrát přepsat samotnou konfigurační pamět MCLR jako MCLR s tou prodlouženou časovou konstantou. Celé smazání provést až poté.
Naposledy upravil(a) jankop dne 15 úno 2008, 10:47, celkem upraveno 1 x.
Zoufalec

#8 Příspěvek od Zoufalec »

Děkuji moc. Vyzkouším
Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 00:00
Kontaktovat uživatele:

#9 Příspěvek od jankop »

Obecně se vyskytují problémy s reprogramováním u PIC v případě, kdy je MCLR jako I/O a aplikace manipuluje s piny ICSPDAT a ICSPCLK. Pak může dojít k situaci, kdy aplikace po přivedení napájení z programátoru převezme řízení procesoru dřív, než to stačí udělat programátor. Ani original ICD2 si s tím často neporadí a varuje před tím, respektive spousta programátorů to svede, ale ICD2 ne. A protože tyhle malé PIC ještě používají modifikovaný programovací algoritmus, tak jsou citlivé při programování na kapacitu na napájecích vodičích.
Uživatelský avatar
tandel
Příspěvky: 1488
Registrován: 01 led 2008, 00:00

#10 Příspěvek od tandel »

jankop: dobré odpovědi
Zoufalec

#11 Příspěvek od Zoufalec »

Tak nad tím pořád laboruju ,čtu datasheet pořád dokola a je mi divný pořadí inicializace hw ve výše uvedeném kódu.

Výpis z datasheetu:

Kód: Vybrat vše

Poznámka: Registry ANSEL (9Fh) a CMCON (19h) musí být nejprve inicializovány, aby se jejich prost��ednictvím
mohl nastavit digitální vstup na analogovém kanálu. Vývody, které jsou nastaveny jako analogové
vstupy, jsou ��teny jako ‚0‘. Registr ANSEL je definován pouze pro PIC12F675.


Nemá být jiné pořadí inicializace hw ?
Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 00:00
Kontaktovat uživatele:

#12 Příspěvek od jankop »

Jestli chceš jiné pořadí, tak ho změň. Můžeš to udělat, ale nemá to v tomto případě opodstatnění. Pokud potřebuješ pomoci najít problém, tak ho specifikuj. Specifikuj software, specifikuj hardware, specifikuj, co to dělá a specifikuj, co to nedělá. Ale nechoď na mě s tím, co se ti nezdá.
Zoufalec

#13 Příspěvek od Zoufalec »

Děkuji za odpovědi.
Omlouvám se.Nebylo mi jasné pořadí inicializace.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“