Официальный сайт студ.городка НГТУ
Программирование и БД » Программа для микроконтроллера PIC 

#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

#3  17.05.07 16:13

Re: Программа для микроконтроллера PIC

скачаю ide для разработки и доку на контроллер
вернусь к вопросу через недлелю, примерно

Offline

#4  17.05.07 16:38

Re: Программа для микроконтроллера PIC

Значит не срочно:) есть время еще разбираться с IDE и контроллером, ну что ж удачи!

Исправлено Vic0nT (17.05.07 16:40)

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

Re: Программа для микроконтроллера PIC

Matrim, а просто аналоговая схема не устраивает? просто мне кажется для столь простых действий логичней чтонить аналоговое замутить, ну конечно кому что ближе)

Offline

#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

Программирование и БД » Программа для микроконтроллера PIC 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.044 сек.
Выполнено 14 запросов.