#1 17.05.07 01:40
Программа для микроконтроллера PIC
в общем, нужна такая штука:
схема, которая после подачи питания подождет 10 секунд и на 0.5 секунды замкнет пару контактов
для замыкания контактов есть транзистор + оптронное реле
для управления, я так думаю, можно использовать PIC12c5xx
проблема в том, что я никогда не программировал и не конфигурировал контроллеры
еще у меня есть программатор i2c, могу залить любую прошивку в eeprom
спаять схему я могу, что дальше?
Offline
#2 17.05.07 09:14
Re: Программа для микроконтроллера PIC
Ну в принципе я наверное смогу тебе помочь в написании программы для PIC12...
на выходе получишь .hex файл прошивки дальше как я понял ты сам справишься.
как быстро тебе надо?
пиши на onv_work@mail.ru
Примерно как-то так!
#include "P12F510.inc"
;__CONFIG и перечислить через & все биты конфигурационного слова - это коментарий кстати
__CONFIG IOSCFS_OFF & MCLRE_OFF & CP_OFF & WDTE_OFF ; надо смотреть в конце файла P12F510.inc
#define START_PROGRAMM 0x00
#define RETURN_InitProcessor 0x01 ; Просто константа
#define RelayOut GPIO, 4
cblock 0x0A ; Стартовый адрес РОН
TempReg
endc
ORG START_PROGRAMM ;Стартовый адрес программы
movf STATUS, w
movwf TempReg
xorlw 0x18
btfss STATUS, Z ; Тест причины просыпания контроллера, от Power-up, WDT-Reset или еще чего
goto START_PROGRAMM
call InitProcessor ; Инициализация контроллера, если он вкл. после подачи питания
MainLoop: ; Бесконечный цикл программы если он необходим
call Wait10Sec
bsf RelayOut ; Включили реле
call WaitMiddleOneSec ; подождали 0,5 сек
; ну а дальше все зависит от количества пива :)))
goto MainLoop
InitProcessor: ; Подпрограмма инициализации регистров спец назначения процессора
movlw 0xC0 ; Если внутренний генератор настроит на 4 МГц, то ядро пика будет работать на частоте
OPTION ; 1 МГц т.е. 1 такт - 1 мкс. Чтобы сделать задержку 10 сек надо 10 000 000 тактов
; для точности отсчета лучше используем таймер0
movlw 0x08
TRIS GPIO
movlw 0x00
movwf GPIO
clrf TempReg ; Очистка регистра TempReg
retlw RETURN_InitProcessor
End
Исправлено Vic0nT (17.05.07 15:29)
Offline
#5 18.05.07 06:28
Re: Программа для микроконтроллера PIC
скачал mplab ide 7.52
написал программку:
Код: C:
#include <12CE519.h> #fuses INTRC,NOWDT,NOPROTECT,NOMCLR #use delay(clock=4000000) void main() { output_low(PIN_B0); delay_ms(10000); output_high(PIN_B0); delay_ms(500); output_low(PIN_B0); }
получил на выходе .hex файл
проблема в том, что мой примитивный программатор i2c не переводит pic в режим программирования
в районе студенческой есть кто-нибудь с программатором под pic12ce519?
Offline
#6 18.05.07 09:12
Re: Программа для микроконтроллера PIC
Что за С компилятор впервые вижу такой? Вообще если память мне не изменяет то буква С в имени pic12ce519 означает что контроллер однократно программируемый!!! Поэтому если тебе хоть раз удалось запрограммировать его, то второй раз ты этого сделать на сможешь. Вполне может быть, что программатор работает, а контроллер уже нет:)! Тебе нужен контроллер с буквой F, pic12f510 например у которого на борту память не однократно прошиваемая, а флэш. Но к сожалению ты его вряд ли где купишь, попробуй применить классику pic16f84 по крайней мере он наверняка в микронике продается или еще pic16f628.
Offline
#7 18.05.07 11:30
Re: Программа для микроконтроллера PIC
Vic0nT написал(а):
Что за С компилятор впервые вижу такой?
CCS C Compiller
удобная штука, на С мне уже как-то приходилось писать, а тут еще и хелп в комплекте есть, достойный
не знаю как по компактности кода, но если нужно что-то быстро написать - очень удобно.
у меня получился вот такой асм:
Код: asm:
CCS PCB C Compiler, Version 3.249, 33857 18-май-07 01:54 Filename: reset.lst ROM used: 49 words (5%) Largest free fragment is 512 RAM used: 4 (16%) at main() level 5 (20%) worst case Stack: 1 locations * 0000: MOVWF 05 0001: GOTO 016 0002: GOTO 003 .................... #include <12CE519.h> .................... //////// Standard Header file for the PIC12CE519 device //////////////// .................... #device PIC12CE519 .................... #list .................... .................... .................... #fuses INTRC,NOWDT,NOPROTECT,NOMCLR .................... #use delay(clock=4000000) 0003: MOVF 0B,W 0004: BTFSC 03.2 0005: GOTO 015 0006: MOVLW 01 0007: MOVWF 08 0008: CLRF 07 0009: DECFSZ 07,F 000A: GOTO 009 000B: DECFSZ 08,F 000C: GOTO 008 000D: MOVLW 4A 000E: MOVWF 07 000F: DECFSZ 07,F 0010: GOTO 00F 0011: NOP 0012: NOP 0013: DECFSZ 0B,F 0014: GOTO 006 0015: RETLW 00 .................... .................... void main() .................... { 0016: CLRF 04 .................... output_low(PIN_B0); 0017: MOVLW FF 0018: MOVWF 09 0019: BCF 09.0 001A: MOVF 09,W 001B: TRIS 6 001C: BCF 06.0 .................... .................... delay_ms(10000); 001D: MOVLW 28 001E: MOVWF 0A 001F: MOVLW FA 0020: MOVWF 0B 0021: CALL 003 0022: DECFSZ 0A,F 0023: GOTO 01F .................... .................... output_high(PIN_B0); 0024: BCF 09.0 0025: MOVF 09,W 0026: TRIS 6 0027: BSF 06.0 .................... .................... delay_ms(500); 0028: MOVLW 02 0029: MOVWF 0A 002A: MOVLW FA 002B: MOVWF 0B 002C: CALL 003 002D: DECFSZ 0A,F 002E: GOTO 02A .................... .................... output_low(PIN_B0); 002F: BCF 09.0 0030: MOVF 09,W 0031: TRIS 6 0032: BCF 06.0 .................... } 0033: SLEEP Configuration Fuses: Word 1: 0FEA INTRC NOWDT NOPROTECT NOMCLR
про то, что микросхема у меня OTP я знаю
мне больше и не нужно, одного будет достаточно
у меня проблема с Vpp, т.к. обычно это питание не нужно
Offline
#8 18.05.07 12:17
Re: Программа для микроконтроллера PIC
Что про Vpp я тебя не понял? Насколько я знаю для pic'ов Vpp=12-13 В нужно всегда, для того чтобы перевести контроллер в режим программирования! И еще если ты действительно уверен, что программа заработает с первого раза тогда ты либо оптимист каких мало, либо очень крут в отношении написания программ! Можно конечно логику работы эмулировать в отладчике, однако не факт что будет работать в железе:(. Причем если пишешь на С, то уверенность в правильности работы программы еще снижается, а как проверить только зашить в контроллер и собственно увидеть что вышло. Все-таки рекомендую обзавестись флэшовым контроллером.
Offline
#9 18.05.07 12:25
Re: Программа для микроконтроллера PIC
в моей приладе для прошивки через i2c нет +12 В
я их городил из дополнительной батарейки
насколько я понимаю проблемы с работой программы есть когда есть ошибки, тут же такая программа, что ошибаться негде
ну и плюсы от С, что опечататься сложнее
Offline
#10 18.05.07 13:40
#11 18.05.07 16:15
Re: Программа для микроконтроллера PIC
KyCoK,предложи что-нибудъ на логике для этой задачи? Потом посчитай сколько это будет стоить и помни о гибкости в функциональном плане с применением контроллера, аппаратная часть одна, алгоритмов работы устройства тысячи:).
Исправлено Vic0nT (18.05.07 16:16)
Offline
#12 18.05.07 18:12
Re: Программа для микроконтроллера PIC
я собрал аналоговую схему первой, не устроила
задача была простая - включить некое устройство через 10 секунд после подачи питания
задержка в 10 секунд на RC цепочке - это достаточно большой конденсатор
если во время работы питание мограет, то схема не запуститься, т.к. заряд с конденсатора не успевает стечь
p.s. я нашел мастеркитовский прошивальщик и pony prog
уже испортил 2 контроллера
пишет, верификация не проходит, потом читает мусор
Offline
#13 20.05.07 13:42
Re: Программа для микроконтроллера PIC
окончательный вариант программы:
Код: C:
#include <12F675.h> #FUSES NOWDT //No Watch Dog Timer #FUSES INTRC_IO //Internal RC #FUSES NOCPD //No EE protection #FUSES NOPROTECT //Code not protected from reading #FUSES NOMCLR //Master Clear pin used for I/O #FUSES PUT //Power Up Timer #FUSES BROWNOUT //Reset when brownout detected #use delay(clock=4000000) void main() { set_tris_a(0b11111110); // set GP0 as output setup_comparator(NC_NC_NC_NC); // disable comparators setup_adc_ports(NO_ANALOGS); // disable analog inputs setup_adc(ADC_OFF); // disable A2D output_low(PIN_A0); delay_ms(10000); output_high(PIN_A0); delay_ms(2000); output_low(PIN_A0); }
прошил в pic12f675
работает, чорт побери
Offline

