Перейти к содержанию

Программирование На Си Для Pic


vims

Рекомендуемые сообщения

День добрый всем. Я занимаюсь программированием на СИ для PIC и столкнулся с несколько странной проблемой. У меня есть отладочная плата, mplab v8.90- среда программирования, пиккит2 в качестве программатора и 2 пика: pic16F873A и pic16F883. С первым пиком проблем нет, написал небольшую простенькую программу и все работает. Но почему-то когда я пытаюсь прошить эту же программу во второй, вылазят ошибки в пикките (hex file not loaded, хотя компиляцию я сделал и всё было отлично; а иногда пишет вообще no device detected). Пытался прошивать через mplab, но там ошибки следующего типа: PK2Error0027: Failed verify (Address = 0x0 - Expected Value 0x0 - Value Read 0x3FFF)- причем это на обоих пиках, но первый хотя бы с пиккитом работает.В общем 2 дня бьюсь и без толку, думаю что дело в битах конфигурации, но не уверен. Программу прилагаю. help

pic.zip

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Компилятор HI-TECH? Тогда вместо

#include <pic.h>

нужно написать

#include <htc.h>

__CONFIG(0x3332);

Не прибегая к даташиту, объясните какие биты конфигурации установлены?

Сразу нормально, чтоб всем было понятно, написать можете? Типа так:

__CONFIG( FOSC_HS & WDTE_OFF );

Инициализация модулей МК... в общем учите даташит на данный МК

И чтоб в дальнейшем небыло странных глюков выучите что такое RMW при работе с портами МК

ЗЫ. Не в обиду, но так запомнится на долго ;)

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Компилятор HI-TECH? Тогда вместо

нужно написать

не нужно....

конфига вида __CONFIG(0x3332); не видел ни разу...

у 883 конфиг двойной

в хайтеке записывается ввиде:

__CONFIG (HS & WDTDIS & LVPDIS & PWRTDIS & UNPROTECT);
__CONFIG (BORV40 );

для 873А такого конфига не существует вовсе и компилятор берет ближайший 0x3F3A при этом разрешено чтение памяти программ и данных

для 883 такой конфиг возможен но чтение памяти и данных запрещено отсюда и не возможность чтения и верификации записанного кода.... очем собственно и сообщает прогер....

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

не нужно....

ну не знаю как лучше, т.к. компилятор понимает оба варианта, хотя в каталоге samples в примерах пишут

#include <htc.h>

А если учесть, что между версиями компилятора появляются отличия, например, в написании имен регистров (например, OPTION, OPTION_REG ), то считаю, что лучше писать как в примерах...

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

#include <htc.h>

указание на все МК помимо пиков хайтек понимает 8051 , MSP430 и ARM

собственно хедер htc.h подключает хедер pic.h и никакого отношения к описанию регистров не имеет....

Ссылка на комментарий
Поделиться на другие сайты

закоменьте конфиг и попробуйте сделать через Kонфигурэйшн битс МПлаба (девайс с 73 на 83 не забудьте сменить) попробуйте так прошить :|

Изменено пользователем fuckir

В поисках работы..

Looking for job

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

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


//Конфигурирование для програматора Фитон процессора PIC18F452
#pragma config OSC = HS       // Тактовый генератор
#pragma config OSCS = OFF     //
#pragma config PWRT = ON      // Таймер включения питания
#pragma config BOR = ON       // Включение супервизора
#pragma config BORV = 27      // СуперВизор при раскачке до 2.7 вольтов
#pragma config WDT = OFF      // Сторожевой таймер
#pragma config CCP2MUX = ON   // ШИМ
#pragma config STVR = OFF     // Решим отладки
#pragma config LVP = OFF      // Низковольтовое программирование
#pragma config DEBUG =OFF     // Лапы для работы а не для отладки
#pragma config CP0 = OFF      // Режим защиты 
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF


#pragma code
void Initializing_processor(void)
{
TRISA = 0b00000000;
 // 00000000 Выбираем направление 1 - вход 0-выход
 // ||||||||___ Выход Неиспользуется
 // |||||||____ Выход Неиспользуется
 // ||||||_____ Выход Неиспользуется
 // |||||______ Выход Неиспользуется
 // ||||_______ Выход Неиспользуется
 // |||________ Выход Неиспользуется
 // ||_________ Выход Неиспользуется
 // |__________ Выход Неиспользуется
TRISB = 0b00000000; //
 //00000000 Выбираем направление 1 - вход 0-выход
 //||||||||___ Выход Неиспользуется
 //|||||||____ Выход Неиспользуется
 //||||||_____ Выход Неиспользуется
 //|||||______ Выход Неиспользуется
 //||||_______ Выход Неиспользуется
 //|||________ Выход Неиспользуется
 //||_________ Выход Неиспользуется
 //|__________ Выход Неиспользуется
TRISC = 0b01000000;
 // 01000000 Выбираем направление 1 - вход 0-выход
 // ||||||||___ Выход Неиспользуется
 // |||||||____ Выход Неиспользуется
 // ||||||_____ Выход Неиспользуется
 // |||||______ Выход Неиспользуется
 // ||||_______ Выход Неиспользуется
 // |||________ Выход Неиспользуется
 // ||_________ Вход TXD
 // |__________ Выход RXD
TRISD = 0b00000000;
 // 00000000 Выбираем направление 1 - вход 0-выход
 // ||||||||___ Выход Неиспользуется
 // |||||||____ Выход Неиспользуется
 // ||||||_____ Выход Неиспользуется
 // |||||______ Выход Неиспользуется
 // ||||_______ Выход Неиспользуется
 // |||________ Выход Неиспользуется
 // ||_________ Выход Неиспользуется
 // |__________ Выход Неиспользуется
TRISE = 0b00000000;
 //00000000 Выбираем направление 1 - вход 0-выход
 //	 |||___ Выход Неиспользуется
 //	 ||____ Выход Неиспользуется
 //	 |_____ Выход Неиспользуется
INTCON = 0b00000000;
 // 00000000
 // ||||||||___ RBIF: Флаг прерывания по изменению уровня сигнала на входах PORTB
 // |||||||____ INT0IF: Флаг внешнего прерывания INT0
 // ||||||_____ TMR0IF: Флаг прерывания переполнения таймера TMR0
 // |||||______ RBIE: Разрешение прерывания по изменению уровня сигнала на входах PORTB
 // ||||_______ INT0IE: Разрешение внешнего прерывания INT0
 // |||________ TMR0IE: Разрешение прерывания по переполнению TMR0
 // ||_________ PEIE/GIEL: Разрешение периферийных прерываний IPEN=1 1 = разрешены прерывания с низким приоритетом
 // |__________ GIE/GIEH: Бит глобального разрешения прерываний IPEN=1 1 = разрешены прерывания с высоким приоритетом

INTCON2= 0b10000000;
 // 10000000
 // ||||||||___ RBIP: Выбор приоритета прерывания по изменению уровня сигнала на входах PORTB 1 = высокий приоритет
 // |||||||____ Не используется
 // ||||||_____ TMR0IP: Выбор приоритета прерывания по переполнению таймера TMR0 1 = высокий приоритет
 // |||||______ Не используется
 // ||||_______ INTEDG2: Выбор активного фронта внешнего прерывания INT2 1 = прерывание по переднему фронту сигнала
 // |||________ INTEDG1: Выбор активного фронта внешнего прерывания INT1 1 = прерывание по переднему фронту сигнала
 // ||_________ INTEDG0: Выбор активного фронта внешнего прерывания INT0 1 = прерывание по переднему фронту сигнала
 // |__________ RBPU: Включение подтягивающих резисторов на входах PORTB

INTCON3= 0b00000000;
 // 00000000
 // ||||||||___ INT1IF: Флаг внешнего прерывания INT1 1 = выполнено условие внешнего прерывания INT1 (сбрасывается программно)
 // |||||||____ INT2IF: Флаг внешнего прерывания INT2 1 = выполнено условие внешнего прерывания INT2 (сбрасывается программно)		
 // ||||||_____ Не используется
 // |||||______ INT1IE: Разрешение внешнего прерывания INT1 1 = внешнее прерывание INT1 разрешено
 // ||||_______ INT2IE: Разрешение внешнего прерывания INT2 1 = внешнее прерывание INT2 разрешено
 // |||________ Не используется
 // ||_________ INT1IP: Выбор приоритета внешнего прерывания INT1 1 = высокий приоритет
 // |__________ INT2IP: Выбор приоритета внешнего прерывания INT2 1 = высокий приоритет
PIR = 0b00000000;
// 00000000
 // ||||||||___ TMR1IF: Флаг прерывания переполнения таймера TMR1 1 = произошло переполнение таймера TMR0 (сбрасывается программно)
 // |||||||____ TMR2IF: Флаг прерывания переполнения таймера TMR2 1 = произошло переполнение таймера TMR2 (сбрасывается программно)
 // ||||||_____ CCP1IF: Флаг прерывания от модуля CCP1 1 = выполнен захват значения TMR1 (сбрасывается программно)
 // |||||______ SSPIF: Флаг прерываний от модуля MSSP 1 = выполнено условие возникновения прерывания от модуля SSP (сбрасывается программно)
 // ||||_______ TXIF: Флаг прерывания от передатчика USART 1 = буфер передатчика USART пуст (сбрасывается записью в регистр TXREG)
 // |||________ RCIF: Флаг прерывания от приемника USART 1 = буфер приемника USART полон (сбрасывается чтением регистра RCREG)
 // ||_________ ADIF: Флаг прерывания от модуля АЦП 1 = преобразование АЦП завершено (сбрасывается программно)
 // |__________ PSPIF: Флаг прерывания ведомого параллельного порта PSP 1 = произошла операция чтения или записи (сбрасывается программно)
PIR2 = 0b00000000;
// 00000000
 // ||||||||___ CCP2IF: Флаг прерывания от модуля CCP2 1 = выполнен захват значения TMR1 (сбрасывается программно)
 // |||||||____ TMR3IF: Флаг прерывания переполнения таймера TMR3 1 = произошло переполнение таймера TMR3 (сбрасывается программно)
 // ||||||_____ LVDIF: Флаг прерывания от детектора пониженного напряжения 1 = обнаружено снижение напряжения питания (сбрасывается программно)
 // |||||______ BCLIF: Флаг прерываний возникновения коллизий на шине 1 = на шине обнаружены коллизии (сбрасывается программно)
 // ||||_______ EEIF: Флаг прерывания по окончании записи в EEPROM данных / Flash памяти программ 1 = запись данных завершена (сбрасывается программно)
 // |||________ Не используется
 // ||_________ Не используется Читается как ‘0’
 // |__________ Не используется
PIE1 = 0b00000000;
 // 00000000 1 = прерывание разрешено 0 = прерывание запрещено
 // ||||||||___ TMR1IE: Разрешение прерывания по переполнению таймера TMR1
 // |||||||____ TMR2IE: Разрешение прерывания по переполнению таймера TMR2
 // ||||||_____ CCP1IE: Разрешение прерывания от модуля CCP1
 // |||||______ SSPIE: Разрешение прерываний от модуля MSSP
 // ||||_______ TXIE: Разрешение прерывания от передатчика USART
 // |||________ RCIE: Разрешение прерывания от приемника USART
 // ||_________ ADIE: Разрешение прерывания от модуля АЦП
 // |__________ PSPIE1: Разрешение прерывания от ведомого параллельного порта PSP
PIE2 = 0b00000000;
 // 00000000 1 = прерывание разрешено 0 = прерывание запрещено
 // ||||||||___ CCP2IE: Разрешение прерывания от модуля CCP2
 // |||||||____ TMR3IE: Разрешение прерывания по переполнению таймера TMR3
 // ||||||_____ LVDIE: Разрешение прерывания от детектора пониженного напряжения
 // |||||______ BCLIE: Разрешение прерываний при возникновении коллизий на шине
 // ||||_______ EEIE: Разрешение прерывания по окончании записи в EEPROM данных / Flash памяти программ
 // |||________ Не используется: Читается как ‘0’
 // ||_________ Не используется: Читается как ‘0’
 // |__________ Не используется: Читается как ‘0’
IPR1 = 0b00000000;
 // 00000000 1 = высокий приоритет 0 = низкий приоритет
 // ||||||||___ TMR1IP: Выбор приоритета прерывания по переполнению таймера TMR1
 // |||||||____ TMR2IP: Выбор приоритета прерывания по переполнению таймера TMR2
 // ||||||_____ CCP1IP: Выбор приоритета прерывания от модуля CCP1
 // |||||______ SSPIP: Выбор приоритета прерываний от модуля MSSP
 // ||||_______ TXIP: Выбор приоритета прерывания от передатчика USART
 // |||________ RCIP: Выбор приоритета прерывания от приемника USART
 // ||_________ ADIP: Выбор приоритета прерывания от модуля АЦП
 // |__________ PSPIP: Выбор приоритета прерывания от ведомого параллельного порта PSP
IRP2 = 0b00000000;
 // 00000000 1 = высокий приоритет 0 = низкий приоритет
 // ||||||||___ CCP2IP: Выбор приоритета прерывания от модуля CCP2
 // |||||||____ TMR3IP: Выбор приоритета прерывания по переполнению таймера TMR3
 // ||||||_____ LVDIP: Выбор приоритета прерывания от детектора пониженного напряжения
 // |||||______ BCLIP: Выбор приоритета прерываний при возникновении коллизий на шине
 // ||||_______ EEIP: Выбор приоритета прерывания по окончании записи в EEPROM данных / Flash памяти программ
 // |||________ Не используется: Читается как ‘0’
 // ||_________ Не используется: Читается как ‘0’
 // |__________ Не используется: Читается как ‘0’
RCON = 0b10000000;
// 10000000
 // ||||||||___ BOR: Флаг сброса по снижению напряжения питания
 // |||||||____ POR: Флаг сброса по включению питания POR
 // ||||||_____ PD: Флаг детектора выключения питания
 // |||||______ TO: Флаг переполнения сторожевого таймера WDT 1 = после сброса POR, выполнения команды CLRWDT или SLEEP
 // ||||_______ RI: Флаг выполнения команды RESET 1 = команда RESET не выполнялась
 // |||________ Не используется
 // ||_________ Не используется
 // |__________ IPEN: Разрешение приоритетной системы прерываний 1 = приоритетная система прерываний разрешена
}
//___________________________________________________________

Изменено пользователем Inigman
Ссылка на комментарий
Поделиться на другие сайты

В ПДД тоже очень много умного и правильного написано. А как оно на самом деле все видят ежедневно на ютубе.

...при раскачке...вольтов...Лапы.

Этикет?

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...