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

Cчётчик с 1 до 10 на pic12f675


rx100xp

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

Ребят всем привет. Посоветуйте пожалуйста алгоритм  счёта импульсов от 1 до 10  на ассемблере.  В сети не смог найти фрагмент кода. Может у кого есть какие ни будь фрагменты строк счёта. С простым счётом и переносом в любой регистр нет  сложностей. Задача следующая, в течении условно 2х секунд ,быстро посчитать импульсы от 1 до 10 и больше, с последующим сохранением  в условной ячейке "Trek" и переходом отправки данных по uart . Основной код программы написал, с этим всё отлично ,  не могу чётко посчитать импульсы с условной кнопки , в папке трек они сохраняются с разными завышенными или заниженными значениями , использовал задержку от дребезга, вообще муть получается , бардак импульсов .   С математикой расчётами не особо дружу, пробовал уходить в прерывания  по разным событиям, используя прерывания и по  TMR0  , TMR1 ,по ноге INT, блин полная хаотичность значений в условном регистре "Trek"  Не понимаю какой используется алгоритм счета, голова кипит четвертые день нечего не клеиться.

Нога вход  для счёта импульсов используется  GPIO,2   (INT) pic16f675

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

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

таймер TMR1  настраиваете  на внешние тактирование по переднему фронту тактового сигнала T1CKI (GP5 , pin2)

таймер TMR0 настраиваете на переполнение каждые 8мс (пред.делитель 1:32, установка таймера TMR0 = 256-250=6, (1мкс*32*250=8000мкс=8мс)
в прерывании делаете счетчик до 250 , 250*8мс=2сек,
по переполнению счетчика , читаете таймер TMR1 , значение сохраняете  в атомарной переменой, выставляете флаг готовности, сбрасываете таймер TMR1.
В основном коде по флагу готовности смотрите значение атомарной переменной.
 

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

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

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

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

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

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

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

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

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

Сегодня хотел было писать код, но заметил что нужно использовать другую ножку. Дело в том что печатку уже развёл , вытравил и спаял. Скажите а как то возможно считать импульсы по ноге GP2 (INT) ? Или всё таки мне лучше переделать печатку  и использовать ногу GP5. В общем то не проблема, могу переделать если та к лучше будет

photo_2024-03-14_01-11-08.jpg

photo_2024-03-14_01-11-23.jpg

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

А лучше опишите задачу по подробней, а то Это:
 

В 12.03.2024 в 20:42, rx100xp сказал:

Задача следующая, в течении условно 2х секунд ,быстро посчитать импульсы от 1 до 10 и больше, с последующим сохранением  в условной ячейке "Trek" и переходом отправки данных по uart .

с последующими действиями очень сильно напоминает "Сага о X,Y и Z"
1. "10 и больше" это какая максимальная частота импульсов?
2. Импульсы чистые или есть дребезг контактов? что вообще формирует импульсы?
3. Что мешало взять МК соответствующий задаче тот же 12ф1822 или 1840 с модулем UART на борту.
4. почему именно ассемблер?

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

Вот что вышло, сильно не судите :) Успеваю посчитать только 1 импульс, на данный момент из  7. TMR1 быстро переполняется ,  видно что то  делаю не так . По UART предпоследний бай {01} 

;**********************
            ORG 0    
;**********************
GOTO NEXT
            ORG 4
  BSF T1CON,0       ; ВКЛЮЧЕНИЕ TMR1 
  BCF PIR1,0          ;ФЛАГ ПЕРЕПОЛНЕИЯ TMR1 
PRER
  BCF INTCON,GIE    ; ГЛОБАЛЬНОЕ РАЗРЕШЕНИЕ ПРЕРЫВАНИЕ   
  BTFSC PIR1,0      ; ФЛАГ ПЕРЕПОЛНЕИЯ TMR1 
  GOTO ST           ; ПРОДОЛЖЕНИЕ НА ПЕРЕДАЧУ ДАННЫХ ПО UART
  BTFSC GPIO,2      ; НОГА СЧЁТА ИМПУЛЬОВ
  INCF Trek         ; +1  
  BTFSC GPIO,2      ; НОГА СЧЁТА ИМПУЛЬОВ
  goto $-1
  GOTO PRER 
 ;**********************
NEXT
  BANK0
  MOVLW B'00100000'
  MOVWF GPIO
  MOVLW .7
  MOVWF CMCON  
  BANK1
  MOVLW B'00010100'
  MOVWF TRISIO
  MOVLW B'00000000' ;НАСТРОЙКА ПОРОТОВ АНАЛОГОВЫЙ ЦЫФРОВОЙ 
  movwf  ANSEL
  MOVLW B'10100000'                           
  MOVWF OPTION_REG  ;ВНЕШНИЕ ТАКТИРОВАНИЯ ПО TMR0
;**********************
  BANK0
  MOVLW .255
  MOVWF TMR0
  MOVLW .1
  MOVWF Papca
  CLRF TMR1L
  CLRF TMR1H
;**********************
 ;BCF PIR1,0          ;ФЛАГ ПЕРЕПОЛНЕИЯ TMR1 
  BCF PIE1,0        ; ЗАПРЕТ ПРЕРЫВАНИЯ ПО TMR1
  MOVLW B'00110000' ; ВКЛЮЧЕНИЕ TMR1
  MOVWF T1CON         
BCF INTCON,T0IF     ;ФЛАГ ПЕРЕПОЛНЕНИЯ TMR0
  BSF INTCON,T0IE   ; ПРЕРЫВАНИЕ ПО TMR0
  BSF INTCON,GIE    ; ГЛОБАЛЬНОЕ РАЗРЕШЕНИЕ ПРЕРЫВАНИЕ    
;**********
START 
;**********
NOP
GOTO $-1
ST

Правда пока в контрейлер не записывал прошивку , сейчас прошью проверю, может в симуляторе чуть тормозит процесс счёта

photo_2024-03-15_02-03-20.jpg

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

Не пойму как цитировать, сейчас опишу.

1) импульсы от Колкола авто сигнализации их обычно 3 +1 продолжительный, у меня их 8, самодельная авто сигнализация на pic16f628, делал сам, всё стоит на своём авто. Датчики все   меджикар + датчик объёма+ музыкальна говорящая сигнализация. Всё это работает, но муз. сигналку собирал на ардуино, терпеть не  переношу атмел и с муз. сигнал. есть глюки, хочу принципиально сделать на pic. 

2)Теоретически, возможен дребезг от реле, внутри блока сигнализации.

3) Для это задачи вполне достаточно программного UARTA, да и компактность  вроде,  :) вообще конечно надо посмотреть что за контролёры, очень интересно ) 

4)Да как то в своё время начинал с него, на C  не смог переключится, хотя конечно хотелось, искал и пробовал разные программы но так и не въехал в C. Ассемблер  как-то вроде роднее, да и поставленные задачи пока вроде решаются, хоть и конечно много времени уходит, на  эту писанину   :)

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

Попытаюсь разобраться с этим. ) Наверно жутко выглядит если смотреть глазами программиста :). Вчера кстати прошил , но не поёму ,толи кнопка у меня дребезг даёт, толи ещё что от, тоже хаотичность счёта, Мелодии воспроизводятся без всякой логики,  в Proteus всё чётко происходит, но только 1 импульс успеваю считать, вечером перепаяю другую кнопку, проверю с ней.

У меня есть файл проекта на С, тот что для ардуина, открою его в блокноте, попробую понять что нибудь с его строк.

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

1 час назад, rx100xp сказал:

в Proteus всё чётко происходит,

1 час назад, rx100xp сказал:

открою его в блокноте,

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

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

В протезе кнопки идеальные.
Давным-давно HALEX07(автор ЧаВо по протезу)
написал скрипт имитации дребезга Bournce_model_1.zip
полезная вещь для отладки.
 Алгоритмы Выше при дребезге не работают.
 

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

Вот такой незамысловатый алгоритм на Си:
 

Спойлер
void main(void) 
{ 
 init();

while(1)
{
   while(!flag.FL1MS) continue;
   flag.FL1MS=0; 
   Task_Button1();
   if((count_time==CONSTANT_TIME)
       &&(m_button1.JustPressed))
     {
	  count_time=0;    
     }
   if(count_time<CONSTANT_TIME)
     {
	  count_time++; 
	  if (m_button1.JustPressed)
	    {
	      count_blink++; 
	      m_button1.JustPressed=0;
	    }
	  if (count_time==CONSTANT_TIME)
        {
	     
	     pulse=count_blink;
	     count_blink=0;
	     SoftUART_TX (pulse);
        }	  
     }

}
} 

 

В протезе с дребезгом кнопки 5мс:
 

Спойлер

1860216548_.png.0eec7f663e7be126a898236f488e2db9.png

 

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

Ёмаё, красота ну реально:), прям всё на одном листе. Надо ещё несколько подходов в сторону mikro С сделать.  По тексту прям как будто всё просто , большое человеческое спасибо, за отзывы, напутствия и информацию, буду вникать ). А вообще то что я написал на ассемблере, это та суть что Вы мне передали? или всё таки я сделал что то не так ? По пробую по играться с дребезгом .

А  по поводу  "С|" качал кучу программ, таких как mikroC PRO for PIC 3.2 , mikroc_8200_setup и ещё какие то но уже не помню, какие то работали, в каких то не компилировался файл, была какая то сложность и я ушёл обратно в ассемблер.

А вообще что посоветуете для обучения и перехода с Ассемблера на С ?:rolleyes: 

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

40 минут назад, rx100xp сказал:

А вообще то что я написал на ассемблере, это та суть что Вы мне передали?

нет.  ваш код на асме вводит в тихий ужасть :)

40 минут назад, rx100xp сказал:

По пробую по играться с дребезгом .

не надо с ним играться, надо сделать нормальную цифровую фильтрацию
алгоритм опроса описан здесь: https://forum.cxem.net/index.php?/topic/222979-опросы-кнопок-на-mega8-и-mega16/#elControls_3514038_menu

40 минут назад, rx100xp сказал:

с Ассемблера на С ?

для перехода нужно всего три вещи:
1. Полный справочник по Си Герберта Шилдта
2. Юзер мануал на выбранный вами компилятор Си с перечнем реализованных функций.
3. наличие желания

 

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

Доброго времени суток. Ваши добрые шутки меня нормально  рассмешили))))) Представляю какой я USER . Cпасибо за направления и советы, буду набирать информацию по написанию сода на С. Чуть отвлекусь на не определенное время. А по поду Герберта Шилдта  было интересно в Википедии почитать  :)

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

В чем Вы увидели шутку? :)
Полный справочник по Си, полностью достаточен для работы с МК .
Практически все руководства по компиляторам содержат в своем названии  упоминание о юзвере , тот же ХС8 мплаба официально называецо: MPLAB_XC8_C_Compiler_User_Guide.
 

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

Про тихий ужас :) Вы не поверите,  в своё время  отдавал большие деньги чтоб мне напечатали книгу на "С" в 500 листов, потом всё забросил это , спустя лет 5 кто то  отдал это всё на макулатура. На базовом начале обучения ассемблера , многое что получилось сделать на 84\628\675\ 877 пиках. Самодельная паяльная станция, умный ДХО с контролем и самоконтролем платы+ звуковым оповещением ошибки логики , Плавное включение вентилятора охлаждение автомобиля с контролем по току и самоконтролем платы + с последующем удержанием на реле, со звуковым оповещением об ошибке логики, да и разную там всякую автоматику для зарядок Эл. мобилей. В основном всё это было самоделки из просто ужасного любопытства:yes:   Для этого мне были достаточны частичные знания ассемблера,  а с микроэлектроникой дружил конечно с далёкого детства,   забросил обучение на "С", так как на асме всё получалось, программирование конечно мозг выносит, аж до тошноты иной раз, думаю что это из за ассемблера))  но мне это жуть как интересно :rolleyes:   поэтому не сдаюсь ))

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

1 час назад, rx100xp сказал:

Про тихий ужас :) Вы не поверите

Да я собственно и не верю.

36 минут назад, korsaj сказал:

Очень странно что вам

Я бы это выразил по другому:
Очень странно, что вам при такой стилистике написания кода на асме  удалось заставить  работать все выше озвученные поделки :).
 

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

5 часов назад, rx100xp сказал:

 забросил обучение на "С", так как на асме всё получалось,

Так, тогда и Си не нужен . Макросов настрогайте на асме и не надо учиться  вставки делать . В avr-gcc вставки - это жуть ...

Но если честно , кмк,  вы тоже шутите )))

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

Справочник  буду изучать  :yes:

Ну что делать, будем учиться и расти, люблю правдивую критику и дельные советы, реально спасибо ребят. По поводу перехода на С , да не было времени, работа перла и асма хватало. Так несколько фоточек, самодельной  ифк паяльной  станции с динамической индикацией и прочей логики ацп. Устройства защиты от скачка напряжения, по высокому и по низкому уровню, с звуковым оповещенье,  с самоконтролем логики работы и выхода из строя коммутационных цепей. Как мог так умел :)  Будем расти))  Ну что  касается  стилистике написания кода, начинал изучать ассемблер по сайту Икараб, возможно что то не так понял, да и сейчас не понимаю что я делал не так при составлении кода,  всё устройства, те что я делал , работают замечательно до сих пор :) видимо частоты внутреннего генератора,  хватает для времени обработки  программы MCU. 

photo_2019-09-19_14-47-35.jpg

123.jpg

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

15 минут назад, rx100xp сказал:

да и сейчас не понимаю что я делал не так при составлении кода

рекомендации по оформлению от Виктора Тимофеева:    mpasm_formatting.pdf

в конце пример полного кода , сравните оформление секции прерывания со своим творчеством...

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

В тот раз не полностью скопировал начальный код на ассемблере, только после org 0 скопировал  фрагмент. Может по этому Вы удивились как это всё может работать:), биты конфигурации и информация о выбранном процессоре была чуть выше. Файл по правильному созданию кода на ассемблере буду изучать, спасибо ). По поводу макросов наверное так у меня и  происходит, в общем всё за работало так как надо , ещё пару моментов допишу и проверю уже на машине, не стал использовать прерывание , а лишь только TMR1 :) Со стороны взгляда профессионала, мой код на ассемблере, наверно  жутко  будет смотреться,  ниже весь код  ;)   

;****************************************************
LIST p=12f675
include P12F675.INC 
__config (0x3004)
#DEFINE  BANK0     BCF STATUS,RP0
#DEFINE  BANK1     BSF STATUS,RP0
;****************************************************
 cblock 0x20 
    Reg_1
    Reg_2
    Reg_3
    Reg_4
    Reg_5
    Reg_6
    SHETCHIK
    Papca   ; НОМЕР ПАПКИ ВОСПРОИЗВЕДЕНИЯ
    Trek    ; НОМЕР ТРЕКА ВОСПРОИЗВЕДЕНИЯ
    Reg_7_BIT
    Reg_TX
endc 
;GPI0,5  TX
;GPIO,0 POWER SOUND 
;GPIO,4 BISY DF LPAYER
;GPIO,2 INPUT PULS
;**********************
            ORG 0    
;**********************
  BANK0
  MOVLW B'00100000'
  MOVWF GPIO
  MOVLW .7
  MOVWF CMCON  
  BANK1
  MOVLW B'00010100'
  MOVWF TRISIO
  MOVLW B'00000000' ;НАСТРОЙКА ПОРОТОВ АНАЛОГОВЫЙ ЦЫФРОВОЙ 
  movwf  ANSEL
  MOVLW B'10000000'                           
  MOVWF OPTION_REG 
;**********************
  BANK0
  MOVLW .1
  MOVWF Papca
  CLRF TMR1L
  CLRF TMR1H
;**********************
  BCF PIR1,0        ;ФЛАГ ПЕРЕПОЛНЕИЯ TMR1 
  BCF PIE1,0        ; ЗАПРЕТ ПРЕРЫВАНИЯ ПО TMR1
  MOVLW B'00110000' ; ВКЛЮЧЕНИЕ TMR1
  MOVWF T1CON         
;**********
START 
;**********
btfss GPIO,2
GOTO $-1
  BSF T1CON,0       ; ВКЛЮЧЕНИЕ TMR1 
  BCF PIR1,0        ;ФЛАГ ПЕРЕПОЛНЕИЯ TMR1 
Shetchik
BTFSC PIR1,0      ; ФЛАГ ПЕРЕПОЛНЕИЯ TMR1 
  GOTO NEXT           ; ПРОДОЛЖЕНИЕ НА ПЕРЕДАЧУ ДАННЫХ ПО UART
BTFSC GPIO,2      ; НОГА СЧЁТА ИМПУЛЬОВ
  CALL DREBEZG
  GOTO Shetchik
NEXT
  MOVF Papca,W
  SUBLW .6
BTFSS STATUS,Z
  GOTO $+3
  MOVLW .1
  MOVWF Papca
GOTO UART
;**********************
UART
;*********************************************************
BSF GPIO,0 ;POWER SOUND
;*********************
  CALL LOG_0   ;START BIT 1 7E
  MOVLW B'01111110'
  MOVWF Reg_TX
CALL UART_TRANCFER
;*********************
  CALL LOG_0   ;START BIT 2 FF 
  MOVLW B'11111111'
  MOVWF Reg_TX
CALL UART_TRANCFER
;*********************
  CALL LOG_0   ;START BIT 3 06
  MOVLW B'00000110'
  MOVWF Reg_TX
CALL UART_TRANCFER
;*********************
  CALL LOG_0   ;START BIT 4 0F
  MOVLW B'00001111'
  MOVWF Reg_TX
CALL UART_TRANCFER
;*********************
  CALL LOG_0   ;START BIT 5 00
  MOVLW B'00000000'
  MOVWF Reg_TX
CALL UART_TRANCFER
;*********************
  CALL LOG_0   ;START BIT 6 ;---PAPKA---
  MOVF Papca,W
  MOVWF Reg_TX
CALL UART_TRANCFER
;*********************
  CALL LOG_0   ;START BIT 7 ;---TREK---
  MOVF Trek,W    
  MOVWF Reg_TX
CALL UART_TRANCFER
;*********************
  CALL LOG_0   ;START BIT 8
  MOVLW B'11101111'
  MOVWF Reg_TX
CALL UART_TRANCFER
;*********************
  INCF Papca
  call Pause
BISY
  BTFSS GPIO,4 ;BISY DF PLAYER
  call Pause
  BCF GPIO,0 ;POWER SOUND 
  clrf Trek
;********************
GOTO START
;*********************************************************
UART_TRANCFER
  MOVLW .8 
  MOVWF Reg_7_BIT 
TX_7_BIT
  BTFSS Reg_TX,0
  CALL LOG_0
  BTFSC Reg_TX,0
  CALL LOG_1
  RRF Reg_TX
  DECFSZ Reg_7_BIT
  GOTO TX_7_BIT
  CALL LOG_1   ;STOP BIT
  RETURN
;***************
LOG_0
  BCF GPIO,5 ;TX
  CALL PAUSE_BIT
  RETURN
;***************
LOG_1
  BSF GPIO,5 ;TX
  CALL PAUSE_BIT
  RETURN
;***************
PAUSE_BIT
            movlw       .35    ;35 <---> 37 СКОРОСТЬ 9600 БОД
            movwf       Reg_1
            decfsz      Reg_1,F
            goto        $-1       
RETURN            
;******************************** 
Pause
            movlw       .173
            movwf       Reg_1
            movlw       .19
            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
GOTO BISY
;******************************** 
DREBEZG   
 
            INCF Trek  
DR  
            movlw       .100
            movwf       Reg_1
            movlw       .50
            movwf       Reg_2
            movlw       .1
            movwf       Reg_3
        CLRF TMR1L
        CLRF TMR1H     
            decfsz      Reg_1,F
            goto        $-3
            decfsz      Reg_2,F
            goto        $-5
            decfsz      Reg_3,F
            goto        $-7
BTFSc GPIO,2      ; НОГА СЧЁТА ИМПУЛЬОВ     
goto  DR    
             RETURN
;******************************** 
end

Много  повторений конечно:wall:пока всё не мог уследить

2024-03-21_111745.png

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

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

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

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

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

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

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

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

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

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

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