PIC 12F675

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

Moderátor: Moderátoři

Zpráva
Autor
Tlouk

PIC 12F675

#1 Příspěvek od Tlouk »

Zdravím,začínám s tímto procesorem a zajímalo by mě,jestli je možné PIC zničit programově (když napíšu špatně program) ?
Na co si dát případně pozor ?

V datashetu píšou že je max.zatížitelnost GP 25mA,je možné aby se zničil po připojení LEDky (5mA) s odporem ?

Díky.
Uživatelský avatar
tatous
Příspěvky: 122
Registrován: 06 zář 2004, 00:00
Bydliště: Střední Čechy

#2 Příspěvek od tatous »

Na obě otázky zní odpověď ne. Zničit procesor můžeš mimo jiné špatným programováním ve špatném programátoru, přepětím, ale ne programem.
Program se může "zakousnout", ale neničí. LED při proudu 5mA také port neodpálí.
Tlouk

#3 Příspěvek od Tlouk »

Programoval jsem to programátorem PRESTO.Program jsem několikrát mazal a znovu programoval,na pohled to fungovalo dobře.Program měl blikat (po 1s) s LED.LEDka (5mA) s odporem byla zapojena mezi GP0 a GND.Programově jsem nastavil všechny registry TRISIO=0. Po zapnutí napájení se LEDka rozsvítila na jednu sekundu a zhasla a už se nerozsvítila.Vynadal jsem procesor a chtěl program smazat,nebo znovu naprogramovat a program hlásil nějakou chybu (prostě to nešlo).
V čem by mohl být problém,nebo kde jsem udělal chybu ?
nop

#4 Příspěvek od nop »

je to jen tip,ale máš vypnutý nebo ošetřený watchdog?
Tlouk

#5 Příspěvek od Tlouk »

watchdog mám vypnutý
nevim

#6 Příspěvek od nevim »

zkus sem poslat program..
Tlouk

#7 Příspěvek od Tlouk »

Je to psaný v mikropascalu a je to example k PIC 12F675.
V projectu jsou zaškrtnuta tato nastavení WDT_OFF,INTRC_OSC_NOCLKOUT
Program:

Kód: Vybrat vše

program led_blinking;
begin
  TRISIO := 0;          // configure pins of gpio as output

  while true do
    begin
      GPIO := $FF;    // turn ON diodes on gpio
      delay_ms(1000);  // wait for 1 second
      GPIO := $00;      // turn OFF diodes on gpio
      delay_ms(1000);  // wait for 1 second
    end;
end.
Tlouk

#8 Příspěvek od Tlouk »

Takhle vypadá kód assembleru při disaaemblerování

Kód: Vybrat vše


; ADDRESS   OPCODE   ASM
; ----------------------------------------------
$0000   $2804         GOTO   _main
$0004   $   _main:
;led_blinking.ppas,21 ::       program led_blinking;
;led_blinking.ppas,25 ::       TRISIO := 0;          // configure pins of gpio as output
$0004   $1303         BCF   STATUS, RP1
$0005   $1683         BSF   STATUS, RP0
$0006   $0185         CLRF   TRISIO, 1
;led_blinking.ppas,27 ::       while true do
$0007   $   led_blinking_L_2:
;led_blinking.ppas,29 ::       GPIO := $FF;    // turn ON diodes on gpio
$0007   $30FF         MOVLW   255
$0008   $1283         BCF   STATUS, RP0
$0009   $0085         MOVWF   GPIO
;led_blinking.ppas,30 ::       delay_ms(1000);  // wait for 1 second
$000A   $3006         MOVLW   6
$000B   $00DC         MOVWF   STACK_12
$000C   $30FF         MOVLW   255
$000D   $00DB         MOVWF   STACK_11
$000E   $30FF         MOVLW   255
$000F   $00DA         MOVWF   STACK_10
$0010   $0BDC         DECFSZ   STACK_12, F
$0011   $2813         GOTO   $+2
$0012   $281A         GOTO   $+8
$0013   $0BDB         DECFSZ   STACK_11, F
$0014   $2816         GOTO   $+2
$0015   $2819         GOTO   $+4
$0016   $0BDA         DECFSZ   STACK_10, F
$0017   $2816         GOTO   $-1
$0018   $2813         GOTO   $-5
$0019   $2810         GOTO   $-9
$001A   $301A         MOVLW   26
$001B   $00DB         MOVWF   STACK_11
$001C   $30FF         MOVLW   255
$001D   $00DA         MOVWF   STACK_10
$001E   $0BDB         DECFSZ   STACK_11, F
$001F   $2821         GOTO   $+2
$0020   $2824         GOTO   $+4
$0021   $0BDA         DECFSZ   STACK_10, F
$0022   $2821         GOTO   $-1
$0023   $281E         GOTO   $-5
$0024   $3042         MOVLW   66
$0025   $00DA         MOVWF   STACK_10
$0026   $0BDA         DECFSZ   STACK_10, F
$0027   $2826         GOTO   $-1
;led_blinking.ppas,31 ::       GPIO := $00;      // turn OFF diodes on gpio
$0028   $0185         CLRF   GPIO, 1
;led_blinking.ppas,32 ::       delay_ms(1000);  // wait for 1 second
$0029   $3006         MOVLW   6
$002A   $00DC         MOVWF   STACK_12
$002B   $30FF         MOVLW   255
$002C   $00DB         MOVWF   STACK_11
$002D   $30FF         MOVLW   255
$002E   $00DA         MOVWF   STACK_10
$002F   $0BDC         DECFSZ   STACK_12, F
$0030   $2832         GOTO   $+2
$0031   $2839         GOTO   $+8
$0032   $0BDB         DECFSZ   STACK_11, F
$0033   $2835         GOTO   $+2
$0034   $2838         GOTO   $+4
$0035   $0BDA         DECFSZ   STACK_10, F
$0036   $2835         GOTO   $-1
$0037   $2832         GOTO   $-5
$0038   $282F         GOTO   $-9
$0039   $301A         MOVLW   26
$003A   $00DB         MOVWF   STACK_11
$003B   $30FF         MOVLW   255
$003C   $00DA         MOVWF   STACK_10
$003D   $0BDB         DECFSZ   STACK_11, F
$003E   $2840         GOTO   $+2
$003F   $2843         GOTO   $+4
$0040   $0BDA         DECFSZ   STACK_10, F
$0041   $2840         GOTO   $-1
$0042   $283D         GOTO   $-5
$0043   $3042         MOVLW   66
$0044   $00DA         MOVWF   STACK_10
$0045   $0BDA         DECFSZ   STACK_10, F
$0046   $2845         GOTO   $-1
;led_blinking.ppas,33 ::       end;
$0047   $2807         GOTO   led_blinking_L_2
;led_blinking.ppas,34 ::       end.
$0048   $2848         GOTO   $


HEX soubor vypadá takhle:

Kód: Vybrat vše

:100000000428FF3FFF3FFF3F031383168501FF30A6
:10001000831285000630DC00FF30DB00FF30DA00A1
:10002000DC0B13281A28DB0B16281928DA0B1628E4
:10003000132810281A30DB00FF30DA00DB0B2128F0
:100040002428DA0B21281E284230DA00DA0B262871
:1000500085010630DC00FF30DB00FF30DA00DC0B0E
:1000600032283928DB0B35283828DA0B3528322896
:100070002F281A30DB00FF30DA00DB0B4028432842
:10008000DA0B40283D284230DA00DA0B45280728F1
:100090004828FF3FFF3FFF3FFF3FFF3FFF3FFF3F3E
:02400E00F43F7D
:00000001FF
Uživatelský avatar
tatous
Příspěvky: 122
Registrován: 06 zář 2004, 00:00
Bydliště: Střední Čechy

#9 Příspěvek od tatous »

Máš vypnuté komparátory a nastaveny porty na digit I/O? Nikde jsem to neobjevil, jak v .asm , tak v disasembl. hexu.
Uživatelský avatar
ViPali
Příspěvky: 524
Registrován: 21 lis 2005, 00:00
Bydliště: Bratislava

#10 Příspěvek od ViPali »

Dve veci:
1/ Keď som prvý krát programoval 675, tak sa správala nie celkom korektne, musel som programovo prednastaviť registre. Tabuľka stavov po zapnutí nemusí celkom platiť. Ale dal sa viackrát programovať.

2/ Keď si ho ťahal zo zapojenia, bolo vypnuté napätie, neodpálil si ho nejakým skratom?
Ako elektrikár sa cítim slobodne.
Môžem hovoriť do vedenia!
nop

#11 Příspěvek od nop »

taky by se měl někde nastavovat registr ANSEL kterým nastavuješ jetli port bude jako analogový nebo digitální IO
Uživatelský avatar
tatous
Příspěvky: 122
Registrován: 06 zář 2004, 00:00
Bydliště: Střední Čechy

#12 Příspěvek od tatous »

Přepiš v "led_blinking.c"
>Oscillator: Internal, 04.000 MHz< původně 8MHz

void main() {
> CMCON = 0x07< vložit
> TRISIO = 0; <

Pokud nemáš MCLR spojeno přes rezistor na +, nastav konfig.bit MCLR=0. Po kompilaci a naprogramování LED bliká v 1sec intervalech.
Vyzkoušeno na kontakt. poli. Pokud napíšeš e-mail, pošlu Ti všechny soubory, včetně kompilace.
Tlouk

#13 Příspěvek od Tlouk »

tatous píše:Máš vypnuté komparátory a nastaveny porty na digit I/O? Nikde jsem to neobjevil, jak v .asm , tak v disasembl. hexu.

Asi ne. Program jsem vzal tak jak je v examples programu Mikropascal.



ViPali píše:Dve veci:
1/ Keď som prvý krát programoval 675, tak sa správala nie celkom korektne, musel som programovo prednastaviť registre. Tabuľka stavov po zapnutí nemusí celkom platiť. Ale dal sa viackrát programovať.

2/ Keď si ho ťahal zo zapojenia, bolo vypnuté napätie, neodpálil si ho nejakým skratom?

1) zajímavé ...,v manuálu píšou :
Mikropočítač je vybaven šesti univerzálními vývody. Jejich nastavení záleží na periferiích, které jsou pro zařízení povoleny.
Obecně platí, že jakmile je povoleno periferní zařízení, přiřazený vývod již nefunguje jako univerzálně použitelný vývod.

Chápal jsem to tak,že pokud se nastaví TRISIO := 0; není potřeba dál nic nastavovat.

2)Na sto procent ne.Napětí zdroje mám 5,1V ,snad to není moc.



nop píše:taky by se měl někde nastavovat registr ANSEL kterým nastavuješ jetli port bude jako analogový nebo digitální IO

Netuším ...,nikde jsem ho nenastavoval.



tatous píše:Přepiš v "led_blinking.c"
>Oscillator: Internal, 04.000 MHz< původně 8MHz

void main() {
> CMCON = 0x07< vložit
> TRISIO = 0; <

Pokud nemáš MCLR spojeno přes rezistor na +, nastav konfig.bit MCLR=0. Po kompilaci a naprogramování LED bliká v 1sec intervalech.
Vyzkoušeno na kontakt. poli. Pokud napíšeš e-mail, pošlu Ti všechny soubory, včetně kompilace.

Rezistor tam nemám,proč je tam třeba a jakej ?
Jestli můžeš ,pošli mi hlavně ty soubory na 904436430439324@tiscali.cz
Díky.
Tlouk

#14 Příspěvek od Tlouk »

Jakou hodnotu má mít ANSEL (pro oba stavy)?
Díky
Uživatelský avatar
tatous
Příspěvky: 122
Registrován: 06 zář 2004, 00:00
Bydliště: Střední Čechy

#15 Příspěvek od tatous »

V mikroC je u 675 nutné vypnout komparátory. Pokud nastavíš všechny porty v TRISGPIO jako výstupní, kompilátor ví, že analogový výstup je blbost a nastaví vše jako digitální. Potom není nutno nastavovat ANSEL. Pokud je to ale potřeba, tak vstup se nastavuje na nejnižších čtyřech bitech ANSEL (Banka1), ANS0 až ANS3 a to, 0-digit, 1-analog, pro AN0 až AN3. I/O se nastavuje v TRISGPIO. Nakonec vše je v Data Sheetu.
Pin MCLR slouží k resetování procesoru. Rezistor na MCLR může být v rozmezí 0 až 10k, já preferuji 4k7 - 10k. Pokud chceš použít někde MCLR jako vstup, připne se vnitřní rezistor tohoto pinu. Viz Data Sheet.
Zkompilované soubory jsem už odeslal na e-mail
Odpovědět

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