Доброго времени суток, уважаемые форумчане.
Небольшая предыстория: разбирая хлам дома, нашел собранный мной когда-то термометр. Датчика видно не было, да и моя память мне подсказывала, что этот термометр у меня не заработал. Сиё чудо содержало микроконтроллер PIC16F630. Рука не поднялась эту микросхемку просто выкинуть. Начались поиски куда бы прикошачить эту микруху чтобы не лежала и не мозолила мне глаза. Долгие поики (не очень то долгие) привели меня на сайт http://www.ladyada.net/make/minipov/download.html и было решено сделать эту ерунду. Скачал схему, глянул, начертил свою плату (не понравилось, что автор предлагает двусторонний вариант). Решил "написать" свою картинку - изучил что да как, скачал что надо. Залил это дело в микросхему (программатор Экстра пик + преобразователь USB-COM). Включил - не работает, что не удивительно (мало ли: кривые руки, не знание языков программирования и компиляции программ). Решил залить одну из предложенных на том сайте прошивок. Результат всё так же нулевой. При указании HEX-файла программа (PICPgm) ругается на отсутствие битов конфигурации и предлагает "натыкать" их вручную. Глянул - вроде всё нормально. Но всё равно не работает это устройство.
Так вот: это у меня кривые руки, либо это обычный развод в интернете? Подскажите пожалуйста, уважаемые Знатоки.
MiniPOV
- Реклама
Re: MiniPOV
Вместо всей трогательной истории нужно выкладывать схему, прошивку и листинг программы (если он есть).
Биты конфигурации в файле есть.
Возьми другую программу.(PICPgm) ругается на отсутствие битов конфигурации
Биты конфигурации в файле есть.
- Asche
- Встал на лапы
- Сообщения: 147
- Зарегистрирован: Вт апр 13, 2010 16:40:50
- Откуда: Оренбург
- Контактная информация:
Re: MiniPOV
Прошивал так же ICProg. Результат нулевой.
Программа на ассемблере:
title "MiniPOV"
LIST P=16F630, F=INHX8M
#include <p16f630.inc>
__CONFIG _INTRC_OSC_NOCLKOUT & _CP_OFF & _MCLRE_OFF & _WDT_OFF
XTAL EQU 4000000 ; internal crystal @ 4MHz
IMAGESIZE EQU 0x10
; backup spots in SRAM for registers during interrupt handling
w_bak equ 0x20
status_bak equ 0x21
fsr_bak equ 0x22
counter equ 0x23
line equ 0x24
pixout equ 0x25
ORG 0x0
goto Main
ORG 0x4
; interrupt handler
; save status, w, & fsr
movwf w_bak
swapf STATUS, W
clrf STATUS
movwf status_bak
movfw FSR
movwf fsr_bak
int_2
btfss PIR1, TMR1IF ; check if timer 1 overflowed
goto End_IntHandle ; if not, finish up interrupt handling
Timer1
bcf PIR1, TMR1IF ; clear timer1 interrupt bit
movfw counter
call EC; look up the value in the character map
movwf line
clrf pixout
btfsc line, 0
bsf pixout, 3
btfsc line, 1
bsf pixout, 4
btfsc line, 2
bsf pixout, 5
btfsc line, 3
bsf pixout, 2
btfsc line, 4
bsf pixout, 1
btfsc line, 5
bsf pixout, 0
movfw pixout
movwf PORTC ; the pixels are in w
clrf pixout
btfsc line, 6
bsf pixout, 2
btfsc line, 7
bsf pixout, 5
movfw pixout
movwf PORTA
incf counter, 1
movlw IMAGESIZE
subwf counter, 0
btfsc STATUS, Z ; if counter == 10
clrf counter ; counter = 0
movlw 0xAA
movwf TMR1L
movlw 0xF0
movwf TMR1H
Timer1_end
End_IntHandle
movfw fsr_bak ; restore all the backed up registers
movwf FSR
swapf status_bak, w
movwf STATUS
swapf w_bak, 1
swapf w_bak, W
retfie ; return from interrupt
Main
CLRF PORTA ; drop all the port A lines low
MOVLW 0x1 ; set_tris_a(0b000001)
BSF 0x03,RP0
MOVWF TRISA
BCF 0x03,RP0
CLRF PORTC
BSF 0x03,RP0
CLRF TRISC ; Port C is all outputs!
BCF 0x03,RP0
; initialize port c with something
movlw 0xA0
movwf PORTC
clrf counter
; enable global interrupts
BSF INTCON,GIE
; enable peripheral interrupts
BSF INTCON,PEIE
; enable TIMER1 (16bit timer)
bcf PIR1, TMR1IF ; clear timer1 interrupt bit first
bsf T1CON, TMR1ON ; turn on the timer
BSF 0x03,RP0
bsf PIE1, TMR1IE ; turn on the interrupt
BCF 0x03,RP0
; set Timer1 to /8 prescale
movlw 0xAA
movwf TMR1L
movlw 0xFF
movwf TMR1H
MainLoop
goto MainLoop
HEART
addwf PCL
retlw B'00000000';
retlw B'00000000';
retlw B'11111111';
retlw B'10000001';
retlw B'10000001';
retlw B'10000001';
retlw B'11111111';
retlw B'00000000';
retlw B'00000000';
EC
addwf PCL
retlw B'00000000';
retlw B'11111111';
retlw B'10001001';
retlw B'10001001';
retlw B'10000001';
retlw B'00000000';
retlw B'00000000';
retlw B'00111100';
retlw B'01000010';
retlw B'10000001';
retlw B'10000001';
retlw B'01000010';
retlw B'00000000';
retlw B'00000000';
retlw B'00000000';
retlw B'00000000';
;.db B'00000000';
end
Программа на ассемблере:
title "MiniPOV"
LIST P=16F630, F=INHX8M
#include <p16f630.inc>
__CONFIG _INTRC_OSC_NOCLKOUT & _CP_OFF & _MCLRE_OFF & _WDT_OFF
XTAL EQU 4000000 ; internal crystal @ 4MHz
IMAGESIZE EQU 0x10
; backup spots in SRAM for registers during interrupt handling
w_bak equ 0x20
status_bak equ 0x21
fsr_bak equ 0x22
counter equ 0x23
line equ 0x24
pixout equ 0x25
ORG 0x0
goto Main
ORG 0x4
; interrupt handler
; save status, w, & fsr
movwf w_bak
swapf STATUS, W
clrf STATUS
movwf status_bak
movfw FSR
movwf fsr_bak
int_2
btfss PIR1, TMR1IF ; check if timer 1 overflowed
goto End_IntHandle ; if not, finish up interrupt handling
Timer1
bcf PIR1, TMR1IF ; clear timer1 interrupt bit
movfw counter
call EC; look up the value in the character map
movwf line
clrf pixout
btfsc line, 0
bsf pixout, 3
btfsc line, 1
bsf pixout, 4
btfsc line, 2
bsf pixout, 5
btfsc line, 3
bsf pixout, 2
btfsc line, 4
bsf pixout, 1
btfsc line, 5
bsf pixout, 0
movfw pixout
movwf PORTC ; the pixels are in w
clrf pixout
btfsc line, 6
bsf pixout, 2
btfsc line, 7
bsf pixout, 5
movfw pixout
movwf PORTA
incf counter, 1
movlw IMAGESIZE
subwf counter, 0
btfsc STATUS, Z ; if counter == 10
clrf counter ; counter = 0
movlw 0xAA
movwf TMR1L
movlw 0xF0
movwf TMR1H
Timer1_end
End_IntHandle
movfw fsr_bak ; restore all the backed up registers
movwf FSR
swapf status_bak, w
movwf STATUS
swapf w_bak, 1
swapf w_bak, W
retfie ; return from interrupt
Main
CLRF PORTA ; drop all the port A lines low
MOVLW 0x1 ; set_tris_a(0b000001)
BSF 0x03,RP0
MOVWF TRISA
BCF 0x03,RP0
CLRF PORTC
BSF 0x03,RP0
CLRF TRISC ; Port C is all outputs!
BCF 0x03,RP0
; initialize port c with something
movlw 0xA0
movwf PORTC
clrf counter
; enable global interrupts
BSF INTCON,GIE
; enable peripheral interrupts
BSF INTCON,PEIE
; enable TIMER1 (16bit timer)
bcf PIR1, TMR1IF ; clear timer1 interrupt bit first
bsf T1CON, TMR1ON ; turn on the timer
BSF 0x03,RP0
bsf PIE1, TMR1IE ; turn on the interrupt
BCF 0x03,RP0
; set Timer1 to /8 prescale
movlw 0xAA
movwf TMR1L
movlw 0xFF
movwf TMR1H
MainLoop
goto MainLoop
HEART
addwf PCL
retlw B'00000000';
retlw B'00000000';
retlw B'11111111';
retlw B'10000001';
retlw B'10000001';
retlw B'10000001';
retlw B'11111111';
retlw B'00000000';
retlw B'00000000';
EC
addwf PCL
retlw B'00000000';
retlw B'11111111';
retlw B'10001001';
retlw B'10001001';
retlw B'10000001';
retlw B'00000000';
retlw B'00000000';
retlw B'00111100';
retlw B'01000010';
retlw B'10000001';
retlw B'10000001';
retlw B'01000010';
retlw B'00000000';
retlw B'00000000';
retlw B'00000000';
retlw B'00000000';
;.db B'00000000';
end
- Вложения
-
- make.hex
- Прошивка
- (914 байт) 407 скачиваний
-
- мигалка.lay
- Плата
- (14.81 КБ) 424 скачивания
Re: MiniPOV
4 ногу МК подтяни к +5 через резистор 10к.
- Asche
- Встал на лапы
- Сообщения: 147
- Зарегистрирован: Вт апр 13, 2010 16:40:50
- Откуда: Оренбург
- Контактная информация:
Re: MiniPOV
Не помогло. Да что ж не так то тут?
- Реклама
Re: MiniPOV
Прошивка исправная. Дело в руках.
- Asche
- Встал на лапы
- Сообщения: 147
- Зарегистрирован: Вт апр 13, 2010 16:40:50
- Откуда: Оренбург
- Контактная информация:
Re: MiniPOV
Ну что ж, будем мучиться - авось что получится
- Asche
- Встал на лапы
- Сообщения: 147
- Зарегистрирован: Вт апр 13, 2010 16:40:50
- Откуда: Оренбург
- Контактная информация:
Re: MiniPOV
Не знаю в чем проблема. И другие прошивки загонял, и тип генератора менял. Ничего не помогает. Печаль-беда...
- Asche
- Встал на лапы
- Сообщения: 147
- Зарегистрирован: Вт апр 13, 2010 16:40:50
- Откуда: Оренбург
- Контактная информация:
Re: MiniPOV
Странное дело: микросхема читается, программируется, но не работает. Решил залить другую прошивку (когда-то собирал хронограф Хронолайт). Прошил, поменял микросхему - не работает. Выходит у меня паленая микруха?


