Stránka 1 z 1

Programování PIC v MPLABU

Napsal: 13 říj 2006, 00:28
od Venda
Zdravím všechny, začínám programovat takže mám Piccolo od Asixu a knížku od Pana Hrbáčka s cédem kde je MPLAB, napíšu podle ní program ale vyhodí mi to okno. Dal jsem otisk obrazovky na www.maro-hk.com/program.htm , šváb je 16F84A . Díky moc za každou radu. Napadlo mě jestli se to nemůže cukat s XP.

Napsal: 13 říj 2006, 08:26
od jezevec
V programu musí být definován typ procesoru

LIST p=16f84A, R=DEC ;direktivy prekladace
include<p16f84A.inc> ;definice nazvu registru

Osobně doporučuji také knížky od jiných autorů, každý to vysvětluje trochu jinak a lépe to pak pocholpíš.

Napsal: 13 říj 2006, 12:56
od 82.99.180.246
jezevec píše:V programu musí být definován typ procesoru

LIST p=16f84A, R=DEC ;direktivy prekladace
include<p16f84A.inc> ;definice nazvu registru

Osobně doporučuji také knížky od jiných autorů, každý to vysvětluje trochu jinak a lépe to pak pocholpíš.


Tohle v knížce vůbec nebylo, prosím tě jakou knížku by jsi mě doporučil, myslím pro úplný začátky :roll: = polopaticky

Jdu to vyzkoušet Díky moc

Napsal: 13 říj 2006, 12:58
od Venda
Tak jsem to konečně přeložil a v UP 2,25 od Asixu nalil do brouka :agree: . Ještě se chci zeptat, MPLAB je teda jenom na editaci, vypalovat neumí ? Díky.

Napsal: 13 říj 2006, 17:38
od jezevec
Každý programátor PICů potřebuje soft, se kterým umí komunikovat. V MPLABu napiš program, můžež ho odsimulovat a přeložit do hex souboru, se kterým pracuje progamátor. Na knížky se mrkni na www.ben.cz

Napsal: 14 říj 2006, 22:37
od Venda
jezevec píše:Každý programátor PICů potřebuje soft, se kterým umí komunikovat. V MPLABu napiš program, můžež ho odsimulovat a přeložit do hex souboru, se kterým pracuje progamátor. Na knížky se mrkni na www.ben.cz


Z Bena jsem si kupoval tady tu "Moderní učebnici programování PIC I."
Myslel jsem jestli jsi ty nebo někdo jiný nekápnul na vyloženě pěkně udělanou knížku o programování. Je nějaký překladač taky v češtině ?

MPLAB

Napsal: 15 říj 2006, 12:54
od elektromichal
dobra knižka je i učebnice programovani PIC od Vacka

taky zkoušim něco s PIC ,chtělo by to něco s příklady
jak zabranit ,překmitu na tlačitku?jak ošetřit tlačitko?
jak se děla zpoždění ? nomostabil
např. kde dělam chybu ja ?
chtěl jsem jednim tlačitkem postupně zapinat 0,1,2 a pak vyp
ale při třetim stisku vypne 1 :-(

jak to napsat ,aby po třech stisknutich tlačitka byl vystup 2 v jedničce
na 5 sekund , v připadě ,že bylo stisknuto jen 2x se provedl reset co 3 minuty a čekal opět na 3 stisknuti ?



list P=12F629
#include <P12F629.INC>
__config _WDT_OFF & _INTRC_OSC_NOCLKOUT & _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON


CN1 EQU 20H
CN2 EQU 21H
CN3 EQU 22H

ORG 000
BSF STATUS,RP0
MOVLW B'00001000' ;nastaveni vstupu vystupu
MOVWF TRISIO
BCF STATUS,RP0
BCF GPIO,0
BCF GPIO,1
BCF GPIO,2

START
BTFSC GPIO,3 ;GPIO3 tlacitko
GOTO $-1
BSF GPIO,2 ;out 2
BTFSS GPIO,3
GOTO $-1
BTFSC GPIO,3
GOTO $-1
BSF GPIO,1 ;out 1
BTFSS GPIO,3
GOTO $-1
BTFSC GPIO,3
GOTO $-1
BSF GPIO,0 ;out 0
BTFSS GPIO,3
GOTO $-1
BTFSC GPIO,3
GOTO $-1
BTFSS GPIO,3
GOTO $-1
BCF GPIO,0
BCF GPIO,1
BCF GPIO,2
GOTO START


END

Napsal: 17 říj 2006, 23:23
od ViPali
Venda pozri si toto forum, je tu riešený problém prerušenia, tam je odkaz na dobrú stránku. A samozrejme Ap.notes na stránke microchip.com, tam je veľa príkladov (aj jednoduchých).

Napsal: 18 říj 2006, 00:13
od ViPali
elktromichal
v prvom rade zapínaš 2 - 1 - 0 - (a všetko vypnúť). Program je jednoduchý a nevidím tam problém (pre istotu sa pozrite aj niekto iný). Ak to nevypína správne, skús na začiatku programu zapísať všetky dotknuté registre, aj keď datašit hovorí že po resete sa nastavia.
Aby si vylúčil zákmity, pripoj G3 cez 4k7 na (+) a k tlačítku pripoj kondenzátor 1n.
Ďalej môžeš za každým rozsvietením vložiť čakanie ~1ms:
START
BTFSC GPIO,3 ;GPIO3 tlacitko
GOTO $-1
BSF GPIO,2 ;out 2
call wait1m
BTFSS GPIO,3
GOTO $-1

Ak po troch stlačeniach tlačítka má svietiť G2 5 sec a potom zhasnúť, tak jednoducho
bcf gpio,0
bcf gpio,1
call wait5s
bcf gpio,2

Ak má po stlačení tlačítka čakať 3 min a potom opäť na začiatok, tak:
bcf status,C
BTFSS GPIO,3 ;GPIO3 tlacitko bolo stlacene?
GOTO LED1 ; bolo stlacene tak svietit
call wait700u ; nebolo stlacene tak cakat
incf cas_cakania ; pripocitat do pomocneho registra cakania
btfss status,C ; skontrolujem ci je nahodeny C
goto $-5 ; nie, tak spat testovat ci je stlacene tlacitko
bcf gpio,0 ; rutina sa opakovala 256 krat, register presiel cez nulu,
bcf gpio,1 ; je nahodeny C, tak sa vynuluju G0 a G1 a ide
goto START; na zaciatok
; 256 x 700us je 179 s = 3 min
LED1:
clrf cas_cakania ; nulovat pomocny register cakania, nabuduce budem potrebovat opat 3min
bsf gpio1
.
.

atď

Napsal: 18 říj 2006, 20:07
od ViPali
Mám dva tipy ako vytvoriť čakanie:
1/
; cakanie 1 ms 12F629 pri intRC osc má 4MHz a na jednu inštrukciu potrebuje jednu mikrosekundu.
.
call wait1m (2 cykly)
.
wait1m
movlw 0xf8 ; (1) 248 do w
movwf reg_w1 ; (1) 248 do reg_w1
; to boli 4 cykly - 4 us
w_1
decf reg_w1,f ; (1) dekrementovať reg_w1
btfss status,C ; (1 - 2) kontrolovat ci je reg_w1 uz nula
goto w_1 ; (2) nie je tak spat na zaciatok cyklu
; 4 cykly x 248 je 992us
return ; (2) vynuloval sa cely register tak navrat z podprogramu
.
4 + 992 + 2(btfss) + 2(return) = 1000us = 1ms

2/ ...Iný možný spôsob je:
povoliť prerušenie, GIE, do TMR0 vložiť 250 (!!!), preddelič nastaviť na 1:4, vstup do TMR0 cez preddelič z oscilátora.
V programe povoliť prerušenie T0IE,
Keďže viem že o 1ms nastane prerušenie tak sa môžem v programe venovať čomukoľvek inému.
Po 1 ms ma prerušenie vráti k riešeniu problemu.
Tú hodnotu 250 treba prepočítať vyhľadom na ošetrenie prerušenia.


Ak má niekto iný spôsob vložte to sem.

Napsal: 19 říj 2006, 13:54
od ViPali
V prípadoch, kde som použil btfss status,C myslím, že by bolo vhodnejšie použiť btfss status,Z, teda nekontrolovať C, ale Z bit.

A ešte prikladám jeden príklad čakanie na dĺžku dvoch bytov:

Wait_N
movlw HI_Time ; Nacitanie horneho bytu cakania
movwf reg_Hi ; uloz do registra
movlw Lo_Time ; hodnota v dolnom byte ostane vo W

W_1:
addlw 1 ; inkrementujem W (w = w + 1)
btfsc status, Z ; je W zaplnene do 0? Ak nie tak skocit.
decfsz reg_Hi, f ; W sa naplnil tak dekrementuj reg_Hi a hned kontroluj ci je nula
goto W_1 ; opakovat slucku
return ; aj reg_Hi uz bol nula tak navrat z cakania

Dĺžka čakania je (4MHz): (((reg_Hi) x (Lo_Time)) x 5) + 5 mikrosekúnd (max. 327685us = 327,685ms)

A niekde som videl zaujímavé predĺženie slučky:

W_1:
addlw 1 ; inkrementujem W (w = w + 1)
goto +2 ; (2) skoc o dva dopredu
goto +2 ; (2) skoc o dva dopredu
goto -1 ; (2) skoc o jeden dozadu
btfsc status, Z ; je W zaplnene do 0? Ak nie tak skocit.
decfsz reg_Hi, f ; W sa naplnil tak dekrementuj reg_Hi a hned kontroluj ci je nula
goto W_1 ; opakovat slucku
return ; aj reg_Hi uz bol nula tak navrat z cakania

t = 720ms