Програмирование pic на СИ.

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

NStorm писал(а):Ага, нашел где собака зарыта.
Ну вот и отлично :)

Добавлено after 3 minutes 48 seconds:
У меня там только С89.
Может у нас версии компилятора разные ? :roll:
СпойлерИзображение
Вложения
2020-11-11_16-41-52.png
(41.19 КБ) 388 скачиваний
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Аlex, ну да, у меня 2.xx версия. Там кстати в бесплатной версии хотя бы 2ой уровень оптимизации дает выставить. И если режим совместимости с C90 выставить в принципе ваш код собирается тоже без ошибок. Но с float в 12f675 банально не влазиет, а без float без проблем уже. Будем считать, что разобрались. )
Реклама
Родился
Сообщения: 9
Зарегистрирован: Чт ноя 05, 2020 21:43:31

Сообщение igorua27 »

Большое всем спасибо за вашу работу.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

igorua27, не знаю какой у вас родной дисплей стоит, но вот тут есть старый немецкий проект, под дисплеи Астры Ф и Корсы Б. Там, правда, другой ПИК, но важна сама идея.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 316
Зарегистрирован: Вт июн 30, 2009 09:17:54
Откуда: г.Сыктывкар

Сообщение cxem »

Переключение светодиодов PIC18F25K80
Закоментируйте строки, а то Гугл не находит
Что эта программа делает ?
Спойлер

Код: Выделить всё

#include <p18cxxx.h>   // тип процессора
#include <delays.h>    // функции задержек
#include <usart.h>
#include <timers.h>
#pragma config FOSC=HS1     // Кварц заменить на 20МГц
#pragma config SOSCSEL=DIG  // Low Power SOSC circuit selected
#pragma config PLLCFG=ON    // умножитель включен
#pragma config FCMEN=OFF    // Отказоустойчивый Монитор Генератора отключен
#pragma config IESO=OFF     // режим переключения генераторов отключен
#pragma config PWRTEN=OFF   // таймер задержки влючения по подаче питания включен
#pragma config BOREN=OFF    // сброс по понижению питания влючен
#pragma config BORV=3       // уровень сброса 3 вольта
#pragma config WDTEN=OFF    // сторожевой таймер
#pragma config WDTPS=32768  // предделитель сторожевого таймера
#pragma config MCLRE=OFF    // MCLRE выключен
#pragma config STVREN=ON    // сброс по переполнению стека отключен
#pragma config XINST=OFF    // поддержка расширенных команд отключена
#pragma config CP0=OFF      // Block 0 (000640-003FFFh) запись разрешена
#pragma config CP1=OFF      // Block 1 (004000-007FFFh) запись разрешена
#pragma config CPB=OFF      // Boot block (000000-0007FFh) запись разрешена
#pragma config CPD=OFF      // Data EEPROM запись разрешена
#pragma config WRT0=OFF     // Block 0 (000640-003FFFh) запись разрешена
#pragma config WRT1=OFF     // Block 1 (004000-007FFFh) запись разрешена
#pragma config WRTC=OFF     // Регистр конфигурации - запись разрешена
#pragma config WRTB=OFF     // Блок загрузки (000000-0007FFh)- запись разрешена
#pragma config WRTD=OFF     // Запись в EEPROM - запись разрешена
#pragma config EBTR0=OFF    // Block 0 (000640-003FFFh) табличное чтение - разрешено
#pragma config EBTR1=OFF    // Block 1 (004000-007FFFh) табличное чтение - разрешено
//*********************************************************
#pragma udata
char inByte=0;
char flag=0;
#pragma code
void MyHighInt(void);
#pragma interrupt MyHighInt
#pragma code high_vector=0x08
void high_vector(void){
    _asm GOTO MyHighInt _endasm
}
//*********************************************************
#pragma code                // говорит компилятору что сделать 
void Init_OSC_USART(void);
void SetInterrupt(void);
void main(void)            // функция, которая не ожидает аргументов
{
    ADCON1=0x0f;           // Настроить контакты как цифровые
    TRISB=0;               // 0b00010000 направление работы ножек порта В 1=Input,0=Output 
    PORTB=0b01010000;      // на ножках TB4 и TB6 установить =1
    Init_OSC_USART();      // включить порт  USART
    SetInterrupt();        // прерывание
    while(1)               // просто бесконечный цикл, который ничего не делает
    {
    }
}
void MyHighInt(void)
{
    if(PIR1bits.RC1IF)
    {
        inByte=RCREG1;
        while(!TXSTA1bits.TRMT);
        putc1USART(inByte);
        if(inByte==0x0a)
        {
            if(!flag)
                LATBbits.LATB6^=1;   // led
            else
                LATBbits.LATB4^=1;  // led
            flag^=1;
        }
    }
}
void SetInterrupt(void)
{
    RCONbits.IPEN=0;    // Приоритет
    INTCONbits.GIE=1;   // включить прерывание
    PIE1bits.RC1IE=1;   // включить уровни приоритета
    INTCONbits.PEIE=1;
}
void Init_OSC_USART(void)
{
    Open1USART( USART_TX_INT_OFF&USART_RX_INT_ON&USART_ASYNCH_MODE
        &USART_EIGHT_BIT &USART_CONT_RX &USART_BRGH_HIGH,129);//9600
}

Вложения
PIC18F25K80_HEX.GIF
(26.03 КБ) 193 скачивания
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 316
Зарегистрирован: Вт июн 30, 2009 09:17:54
Откуда: г.Сыктывкар

Сообщение cxem »

Как правильно продублировать сигнал на RB0 с RC6 ?

Код: Выделить всё

void main(void)
{
   {  
      PORTBbits.RB0 = !PORTCbits.RC6;
      PORTCbits.RC7 = !PORTCbits.RC1;
   }
     
}
K-Line_1.GIF
(36.77 КБ) 188 скачиваний
Реклама
Поставщик валерьянки для Кота
Сообщения: 1972
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

cxem,
1. согласно изображенной схеме светодиоды никогда не загораются :), поверните их электроды
2. пересчитайте делитель напряжения на входе RA0, U не более Vdd
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 316
Зарегистрирован: Вт июн 30, 2009 09:17:54
Откуда: г.Сыктывкар

Сообщение cxem »

в Протеусе сигнал показал минимальные погрешности:

Код: Выделить всё

while( 1 )                                    //  зацикливание функции
{
if(PORTCbits.RC7 == 0)             //  если на RC7 равно 0
PORTBbits.RB0 = 1;                  //  установить на RB0   1
else                                          //  иначе
PORTBbits.RB0 = 0;               //  установить на RB0   0
if(PORTCbits.RC1 == 0)        //  если на RC1 равно 0
PORTCbits.RC6 = 0;            //  установить на RB6  0
else                                         //  иначе
PORTCbits.RC6 = 1;        //  установить на RB6  1
}
Протеус.png
(6.77 КБ) 131 скачивание
Встал на лапы
Сообщения: 99
Зарегистрирован: Пт ноя 28, 2014 13:40:47

Сообщение oleg_g »

натолкните на мысль - можно ли на pic10f202 реализовать сигнал на пассивный зуммер 2000гц пин (G0) с одновременным отслеживанием замыканий на пин(G3). Можно переиграть пины.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="oleg_g",url="/forum/viewtopic.php?p=4160228#p4160228"]натолкните на мысль[/uquote]
Можно, конечно. Только что будет результатом "отслеживания"?
Встал на лапы
Сообщения: 99
Зарегистрирован: Пт ноя 28, 2014 13:40:47

Сообщение oleg_g »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4160233#p4160233"][uquote="oleg_g",url="/forum/viewtopic.php?p=4160228#p4160228"]натолкните на мысль[/uquote]
Можно, конечно. Только что будет результатом "отслеживания"?[/uquote]
сон!
при замыкании на землю пинаG3 на землю -сон
Встал на лапы
Сообщения: 99
Зарегистрирован: Пт ноя 28, 2014 13:40:47

Сообщение oleg_g »

Вопрос с пробуждением решен - будильником или палкой по голове :))
остался вопрос только с зумером и отслеживанием пина в это же время (активный зуммер не предлагайте )
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

oleg_g писал(а):остался вопрос только с зумером и отслеживанием пина в это же время
Вам же ответили :[uquote="КРАМ",url="/forum/viewtopic.php?p=4160233#p4160233"]Можно, конечно.[/uquote]
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="oleg_g",url="/forum/viewtopic.php?p=4160258#p4160258"]сон!
при замыкании на землю пина G3 на землю -сон[/uquote]
GPIO3 - это MCLR, поэтому его не надо отслеживать. Ноль на нем уведет МК в ресет и будет там удерживать. Это идентично сну по потреблению.
Таким образом, нужно только дергать ногой пьез.
Ну и чтобы пьез звучал громче и для упрощения схемотехники, нужно оный пьез включить между двух GPIO и дергать их противофазно.
Встал на лапы
Сообщения: 99
Зарегистрирован: Пт ноя 28, 2014 13:40:47

Сообщение oleg_g »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4160302#p4160302"][uquote="oleg_g",url="/forum/viewtopic.php?p=4160258#p4160258"]сон!
при замыкании на землю пина G3 на землю -сон[/uquote]
GPIO3 - это MCLR, поэтому его не надо отслеживать. Ноль на нем уведет МК в ресет и будет там удерживать. Это идентично сну по потреблению.
Таким образом, нужно только дергать ногой пьез.
Ну и чтобы пьез звучал громче и для упрощения схемотехники, нужно оный пьез включить между двух GPIO и дергать их противофазно.[/uquote]
спасибо , попробую.

Добавлено after 1 hour 25 minutes 19 seconds:
еще вопрос - позволяет ли микроконтроллер реализовать такое типа
tone on
.......
выполнение других операций во время пищания
....
tone off
если да , то как?
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Зачем? Кто будет это on/off реализовывать? Есть еще какие то точки управления?
Я так и не понял общий список задач.
Поставщик валерьянки для Кота
Сообщения: 1972
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

В выбранном микроконтроллере есть один таймер (TMR0) без прерывания по переполнению.
Возможности генерации сигнала (в сл: 2 kHz) либо прямое управление пинах и удержание/пауза, либо RTOS (что в данном случае: одно и то же). Некоторые простые операции/действия типа проверки кнопок и т.д. можно выполнить (чуть "притормозит" -> снизит частоту), а посложнее - образно ожидаются нестыковки генерации и др.

Задача рядом с кнопкой выполнима: кнопка с включением/выключением генерации, без сна (для теста, пока алг. такой). См. симуляция ниже: PIC10F202, ROM used: 70/512 (14%), RAM used: 8/24 (33%). В памяти есть еще много места, и это на "языке высокого уровня".

Дайте подробный пример того, что вы подразумеваете под: "выполнение других операций во время пищания". По крайней мере, опишите, что это за устройство, что будет делать пользователь и что от микроконтролера ожидаете. Вообще без подробного задания, правильно не ответишь.
(частично пользуюсь переводчиком БГ-РУ).
Вложения
10f202_2_khz.jpg
(195.31 КБ) 111 скачиваний
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

ТС желает локально изменить УЖЕ ИМЕЮЩИЙСЯ КОД, чтобы вставить озвученную тут задачу. Проблема в том, что имеющийся код работает на блокирующих задержках.
Учитывая, что эта архитектура не имеет прерываний и аппаратного выхода таймера, никакая простая модификация кода работать не будет. Нужно писать код заново. Все это я ему объяснил в личке.
ТС решил взять паузу на подумать и решить что с этим делать.
Надеюсь, что ТС не обидится за озвученное мной...
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 316
Зарегистрирован: Вт июн 30, 2009 09:17:54
Откуда: г.Сыктывкар

Сообщение cxem »

байт получил через UART, а как его вытолкнуть через ножку 21 (RB0) ?

Код: Выделить всё

#define KLINE_OUT LATBbits.LATB0
void gets1USART()
  {
    while(!DataRdy1USART());                // ждать, пока данные будут получены 
	char byte_outKline = Read1USART();      // присвойть содержимое регистра  USART в однобайтовую переменную  byte_outKline
	                                        // вытолкнуть биты на ножку 21 (RB0) 
  }
Вложения
K-Line_UART.GIF
(7.92 КБ) 127 скачиваний
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 164
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы

Сообщение Родэрик »

А почему просто не соединить эти две ножки, или ты меняешь скорость?
Контактная информация:
Ответить

Вернуться в «PIC»