Stránka 1 z 1

12F675 - konfigurace

Napsal: 14 úno 2008, 20:38
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

Napsal: 15 úno 2008, 04:37
od tandel
Něco podobného se tu už řešilo http://www.ebastlirna.cz/modules.php?na ... highlight=

Napsal: 15 úno 2008, 09:16
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

Napsal: 15 úno 2008, 09:38
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

Napsal: 15 úno 2008, 09:59
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é?

Napsal: 15 úno 2008, 10:19
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.

Napsal: 15 úno 2008, 10:38
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é.

Napsal: 15 úno 2008, 10:43
od Zoufalec
Děkuji moc. Vyzkouším

Napsal: 15 úno 2008, 10:59
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.

Napsal: 15 úno 2008, 13:52
od tandel
jankop: dobré odpovědi

Napsal: 15 úno 2008, 20:02
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 ?

Napsal: 15 úno 2008, 23:20
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á.

Napsal: 16 úno 2008, 12:29
od Zoufalec
Děkuji za odpovědi.
Omlouvám se.Nebylo mi jasné pořadí inicializace.