Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 21:46

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 22 ] 
Автор Сообщение
 Заголовок сообщения: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 02:51 
Только пришел

Зарегистрирован: 13 сен 2018, 19:35
Сообщения: 20
На ассемблере (MPASM) не смог я его заставить переключать светодиоды с частотой 1 сек. Частота в 2-3 раза выше. Но стабильная. Запитывал уже схему от батареек пальчиковых, ставил кварцы разные (пересчитав задержку в программе конечно). Поставил кварц с какой то крутой серверной платы, так что он 100% рабочий. Результат один - мигает на повышенной частоте. Плюнул, написал похожую программу на С (XC8). Прошил, запустил, мигают через 1 сек. ! Но рано обрадовался, через некоторое время частота стала снижаться, дошло до того что просто один светодиод горит и все. Питание снял, подал, опять частота нестабильная. Или кнопку разомкнешь, не горят, замкнешь, не горят. Потом один включится. Короче глюки какие-то.
А в Протеусе все работает безукоризненно.
Использовал MPLAB X 5.35 Прошивал прогой PICPgm. Программатор Multi PIC Programmer 5 Ver.2 А задержки считал в программе PIC Delay
Логика программы такая - когда кнопка замкнута, то светодиоды моргают один за другим, разомкнута - не моргают.
Может быть мне такой микроконтроллер глючный попался? Но ведь программатор видит его и шьет и сам контроллер ножками дрыгает. Посмотрите, нет ли в моем коде грубых ошибок.

вот код на асме
Код:
            LIST        p=16F870
            __CONFIG    03F3AH      
status      equ         03h
portb       equ         06h
trisb       equ         06h
Reg_1       equ      10h
Reg_2       equ      11h
Reg_3       equ      12h      
;------------------------------------------------       
       org 0
;------------------------------------------------      
       bsf      status,5
       bcf      trisb,2
       bcf      trisb,4
       bcf      trisb,5
       bcf      status,5
;------------------------------------------------
       bcf      portb,2
       bcf      portb,4
       bcf      portb,5
      
LED1       call   key_on
       bcf      portb,5
       bsf      portb,2
       call        delay_2
LED2       call   key_on
       bcf      portb,2
       bsf      portb,4
       call        delay_2
LED3       call   key_on
       bcf      portb,4
       bsf      portb,5
       call        delay_2
       goto   LED1
;-----------ОПРОС КНОПКИ--------------------------
key_on       btfsc   portb,1
       goto   key_on
       call   delay        ;защита от дребезга
       btfsc   portb,1
       goto   key_on
       return
;-----------ЗАДЕРЖКА 50 млсек. при кварце 20 МГц-----------------------------
delay       movlw       .169
            movwf       Reg_1
            movlw       .69
            movwf       Reg_2
            movlw       .2
            movwf       Reg_3
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            decfsz      Reg_3,F
            goto        $-5
            nop
            nop
       return
;-----------ЗАДЕРЖКА 1 сек. при кварце 20 МГц-----------------------------
delay_2       movlw       .110
            movwf       Reg_1
            movlw       .94
            movwf       Reg_2
            movlw       .26
            movwf       Reg_3
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            decfsz      Reg_3,F
            goto        $-5
            nop
       return
;------------------------------------------------      
            end


вот код на С
Код:
#include <xc.h>

#define _XTAL_FREQ 20000000

// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config CP = OFF         // FLASH Program Memory Code Protection bits (Code protection off)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF        // Low Voltage In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection (Code Protection off)
#pragma config WRT = ALL        // FLASH Program Memory Write Enable (Unprotected program memory may be written to by EECON control)

//--------------------------------------------
unsigned char CheckButton(void)
{
  unsigned char result=0;
  unsigned int butcount=0;
  while(!RB1)
  {
    if(butcount < 10000)
    {
      butcount++;
    }
    else
    {
      result = 1;
      break;
    }
  }
  return result;
}
//--------------------------------------------
void main(void) {
    TRISB &= ~0x34;
    PORTB &= ~0x34;
    while(1)
    {
        if(CheckButton())
        {
            PORTBbits.RB2 = 1;
            __delay_ms(1000);
            PORTBbits.RB2 = 0;
            PORTBbits.RB4 = 1;
            __delay_ms(1000);
            PORTBbits.RB4 = 0;
            PORTBbits.RB5 = 1;
            __delay_ms(1000);
            PORTBbits.RB5 = 0;
        }
    }
    return;
}


Вложения:
2020-10-05_000407.jpg
2020-10-05_000407.jpg [ 210.16 Кб | Просмотров: 2513 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 05:26 
Заглядывает иногда

Зарегистрирован: 26 фев 2018, 03:06
Сообщения: 134
а вы из main куда по return выйти пытаетесь? тем более что main у вас определен как void....
ну и наверно не отключены аналоговые входы...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 13:20 
Только пришел

Зарегистрирован: 13 сен 2018, 19:35
Сообщения: 20
Это порт А к питанию подтянуть надо?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 13:25 
Старожил
Аватара пользователя

Зарегистрирован: 08 сен 2011, 13:39
Сообщения: 1006
Откуда: Беларусь, Гомель
Магия... Может таки железо ни живо не мертво? Питание, цепи кварца, флюс, сопли и т.п...
То что на повышенной - так это может косяки в магических числах задержек, а вот то что плавает... Засунуть прошивку в какой протеус, если там не плавает - значит косяк на плате, на первый взгляд плавать там в коде причин нет...
DmitriyVDN писал(а):
а вы из main куда по return выйти пытаетесь?

нафик не нужно конечно, но и на описанную то проблему не мешает...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 13:32 
Только пришел

Зарегистрирован: 13 сен 2018, 19:35
Сообщения: 20
Так в Протеусе обе прошивки нормально работают. Схема у меня без пайки собрана, на макетной плате. Детали уже перепроверил все контачит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 13:53 
Старожил
Аватара пользователя

Зарегистрирован: 08 сен 2011, 13:39
Сообщения: 1006
Откуда: Беларусь, Гомель
Эм... кварц на макетке это такое себе... возможно поэтому и не работает нихрена. Нагрузочные емкости кварца обычно - пару десятков пикофарад. Они есть вообще кстати? На макетке я так понимаю ряды контактов параллельные, там паразитных емкостей и индуктивностей может хватить для того, чтобы завалить генератор...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 14:39 
Старожил

Зарегистрирован: 04 окт 2017, 22:23
Сообщения: 231
Раз магия, значит попробуйте такой бубен - ножку RB3/PGM (RB3 can also be the low voltage programming input) подтяните к земле...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 15:25 
Заглядывает иногда

Зарегистрирован: 03 июл 2012, 19:16
Сообщения: 180
2020 год, делэй, жесть :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 15:37 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
radioslon писал(а):
Раз магия, значит попробуйте такой бубен - ножку RB3/PGM (RB3 can also be the low voltage programming input) подтяните к земле...


Цитата:
#pragma config LVP = OFF // Low Voltage In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 15:41 
Старожил

Зарегистрирован: 04 окт 2017, 22:23
Сообщения: 231
ну или так.. более простой бубен....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 15:48 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 06 окт 2019, 21:35
Сообщения: 120
Откуда: Ukraine
Icee писал(а):
Плюнул, написал похожую программу на С (XC8). Прошил, запустил, мигают через 1 сек. ! Но рано обрадовался, через некоторое время частота стала снижаться, дошло до того что просто один светодиод горит и все. Питание снял, подал, опять частота нестабильная.

В симуляторе такое происходит?
Подозреваю что нет, ищите причину в самой макетке и принципиальной схеме собранного девайса.
Приведите схему включения резонатора и фото этой схемы на макетке..

N1X писал(а):
Эм... кварц на макетке это такое себе...

Верно, могут быть плавающие погрешности..

Int_13h писал(а):
2020 год, делэй, жесть :)

Почему, при чем здесь текущий год?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 17:24 
Заглядывает иногда

Зарегистрирован: 03 июл 2012, 19:16
Сообщения: 180
Droid 77 писал(а):
Почему, при чем здесь текущий год?

На 5 МИПСах задержки делеями по 1 секунде, когда там куча таймеров без дела простаивает - это же ужасно. Ладно 1-2-10 мкс nop-ами обеспечить, но не 5 миллионов инструкцый же выполнять, чтобы паузнуть светодиод на 1 секунду! Этож эмбеддинг а не браузеростроение, когда ФФоксу позволено отжырать все доступные ядра и оперативку, чтобы показать страничку текста.
А год при том, что уже куча литературы исписана за последние 30 лет по этому поводу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 05 окт 2020, 18:19 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Int_13h, пофиг, если больше ничего не планируется делать и питание от сети.

radioslon, не или, а уже. Это же цитата с кода ТС, он уже сконфигурил этот пин в обычный GPIO.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 06 окт 2020, 00:01 
Только пришел

Зарегистрирован: 13 сен 2018, 19:35
Сообщения: 20
Сегодня включил, переключает через 1 секунду, на кнопку реагирует (вместо кнопки стоит перемычка зеленая, типа кнопка замкнута). С той самой сишной прошивкой. Чудеса. Ну я взял, переписал в ассемблерную программу задержку под кварц 4 МГц (решил снизить на всякий случай, а то 20 МГц это уже предел). Конденсаторы от кварца на минус у меня стоят по 33 пФ. В даташите вроде сказано что это даже лучше, только запуск будет чуть дольше. Прошил, воткнул в плату кварц 4 МГц, включаю, моргает опять в 3 раза чаще, зараза. И главное так стабильно, без всяких сбоев и на кнопку срабатывает как надо. Детали шевелил, все пальцами перетыкал, гонял полчаса, все четко. Но почему такая частота?! На Си то все нормально. Неужели программа расчета задержки считает неправильно? Но тогда и в Протеусе моргало бы чаще одной секунды, но ведь там все нормально - 1 секунда.

https://youtu.be/qtTsbHD82C8


Вложения:
03.jpg
03.jpg [ 195.97 Кб | Просмотров: 2334 ]
02.jpg
02.jpg [ 185.24 Кб | Просмотров: 2334 ]
01.jpg
01.jpg [ 221.06 Кб | Просмотров: 2334 ]


Последний раз редактировалось Icee 06 окт 2020, 00:40, всего редактировалось 3 раз(а).
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 06 окт 2020, 00:02 
Только пришел

Зарегистрирован: 13 сен 2018, 19:35
Сообщения: 20
Вот этой программой задержки считаю


Вложения:
PIC_Delay.jpg
PIC_Delay.jpg [ 59.01 Кб | Просмотров: 2333 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 06 окт 2020, 00:26 
Только пришел

Зарегистрирован: 24 мар 2020, 02:45
Сообщения: 6
- для пиков имеет значение тип кварца LP/HS/XT, это нужно учитывать при смене кварца
- любые резонаторы на макетках это очень хреновая идея, как минимум нужно проверять наличие частоты именно на ноге контроллера
- различные левые калькуляторы\кодогенераторы это тоже сомнительное удовольствие, если они ранее не были проверены. у пиков с этим что-то не заладилось и даже с официальными хс8\хс16 встречались баги, код из работающего становился неработающим при разных оптимизациях (писалось на С)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 06 окт 2020, 00:32 
Только пришел

Зарегистрирован: 13 сен 2018, 19:35
Сообщения: 20
Так в даташите сказано что от 4 до 20 МГц это тип HS. Я его в конфиге и ставлю. А как может не быть частоты на ногах контроллера, когда кварц к нему вплотную стоит? Не было бы частоты, он бы вообще не запустился


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 06 окт 2020, 10:27 
Старожил
Аватара пользователя

Зарегистрирован: 08 сен 2011, 13:39
Сообщения: 1006
Откуда: Беларусь, Гомель
Icee писал(а):
моргает опять в 3 раза чаще, зараза

Если ровненько в 3 раза, тогда как раз объяснимо. Скорее всего паразитные ёмкости и индуктивности в макетке образовали контур с подходящей частотой, что позволило генератору работать на третьей гармонике кварца...
Уже не раз сказали: кварц+макетка вещи несовместимые.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 06 окт 2020, 12:18 
Здравствуйте!

Зарегистрирован: 06 окт 2020, 12:09
Сообщения: 1
попробуй вот эту задержку для 20МГц (генератор HS, точно задержку нужно подбирать):


DELAY:
MOVLW 0x18
MOVWF COUNT1

LOOP2:
MOVLW 0xff
MOVWF COUNT2
LOOP3: MOVLW 0xff
MOVWF COUNT3
DECFSZ COUNT3,1
GOTO $-1
DECFSZ COUNT2,1
GOTO LOOP3
DECFSZ COUNT1,1
GOTO LOOP2
RETURN

Вообще у тебя генератор на пределе - важно качество монтажа... можно еще снизить немного частоту для опытов...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 06 окт 2020, 22:19 
Только пришел

Зарегистрирован: 13 сен 2018, 19:35
Сообщения: 20
Все, разобрался!
Дело не в макетке, не в кварце, не в программе расчета задержек, не в аналоговых входах и не в контроллере вообще.
Я оказывается в подпрограмме задержки использовал регистры специального назначения :)
Задействовал общие регистры 20h, 21h и 22h и все заработало как часы.
Код теперь такой
Код:
            LIST        p=16F870
#include "p16f870.inc"

; CONFIG
; __config 0x3F3A
__CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _CP_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_ALL
;------------------------------------------------------------------------------------------------------
Reg_1       equ      20h
Reg_2       equ      21h
Reg_3       equ      22h      
;------------------------------------------------       
       org 0
;------------------------------------------------
       bsf      STATUS,5
       bcf      TRISB,2
       bcf      TRISB,4
       bcf      TRISB,5
       bcf      STATUS,5
;------------------------------------------------
       bcf      PORTB,2
       bcf      PORTB,4
       bcf      PORTB,5
      
LED1       call   key_on
       bcf      PORTB,5
       bsf      PORTB,2
       call        delay_2
LED2       call   key_on
       bcf      PORTB,2
       bsf      PORTB,4
       call        delay_2
LED3       call   key_on
       bcf      PORTB,4
       bsf      PORTB,5
       call        delay_2
       goto   LED1
;-----------ОПРОС КНОПКИ--------------------------
key_on       btfsc   PORTB,1
       goto   key_on
       call   delay       ;защита от дребезга
       btfsc   PORTB,1
       goto   key_on
       return   
;-----------ЗАДЕРЖКА 50 млсек. при кварце 4 МГц-----------------------------
delay       movlw       .238
            movwf       Reg_1
            movlw       .65
            movwf       Reg_2
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            nop
       return
;-----------ЗАДЕРЖКА 1 сек. при кварце 4 МГц-----------------------------
delay_2    movlw       .173
            movwf       Reg_1
            movlw       .19
            movwf       Reg_2
            movlw       .6
            movwf       Reg_3
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            decfsz      Reg_3,F
            goto        $-5
            nop
            nop
       return
;------------------------------------------------      
            end


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


Вложения:
Комментарий к файлу: синие квадратики это спец регистры, а использовал я те что подчеркнул
2020-10-06_195916.jpg
2020-10-06_195916.jpg [ 152.59 Кб | Просмотров: 2199 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 06 окт 2020, 23:06 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Цитата:
Но вот почему программа написанная на С хоть и глючила, но все же переключала светодиоды с заданной частотой

Ну как минимум потому, что она не будет использовать неправильные регистры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC16F870 утомил
СообщениеДобавлено: 06 окт 2020, 23:43 
Только пришел

Зарегистрирован: 13 сен 2018, 19:35
Сообщения: 20
NStorm писал(а):
Цитата:
Но вот почему программа написанная на С хоть и глючила, но все же переключала светодиоды с заданной частотой

Ну как минимум потому, что она не будет использовать неправильные регистры.

Да, точно, чет затупил. Си же сам все делает, надо только частоту и время ему указать. А глючил наверно все же из-за плохого контакта


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB