Jump to content
Sign in to follow this  
Guest vit2700

Прошу помощи по BASCOM AVR

Recommended Posts

Guest vit2700

Доброго дня всем гуру  программирования в BASCOM AVR !  В программировании я также как и в космической отрасли ... Увлекаюсь рыбалкой, использую электронные сигнализаторы поклевки (китайские). У меня их с приказавшим долго жить микроконтроллером уже больше десятка. Появилась идея , в корпуса изготовить свою плату на МК attiny13, соответственно без полного набора функций как у оригинала. Здесь на сайте нашел  статью "Музыкальный звонок на МК Attiny13". В готовую схему в колхозил светодиод. По факту кнопку планирую заменить на геркон. 

 Не могу разобраться как сделать чтоб при нажатии  кнопки, контролер выполнил программу один раз и остановил цикл даже с нажатой кнопкой(это тот случай когда магнит на ролике остановился возле геркон и замкнул контакт ) ? Отпустил,нажал еще раз  все повторилось.

Есть вторая проблема, во время цикла контролер  не реагирует на кнопку .Как сделать чтоб при повторном нажатии происходил сброс программы (уже действующего цикла) и запускалась новая программа (цикл)? 

$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 16
$swstack = 16
$framesize = 16
$noramclear

Config PINB.1 = Input
Config PORTB.2 = Output

Toch Alias PINB.1
Led Alias PORTB.2

Config INT0 = Low Level
On INT0 Button:
Enable Interrupts
Enable INT0

Declare Sub Melodi1()

Dim Melcount As Byte

Do
Powerdown
Loop

End

Sub Melodi1()
Do
Sound , PORTB.0 , 30 , 100
Waitms 10
Sound , PORTB.0 , 30 , 150
Waitms 10
Melcount = Melcount + 1
Loop Until Melcount = 5

Melcount = 0

if Toch = 1 Then Led = 0
if Toch = 0 Then Led = 1
Led = 1
Waitms 200
Led = 0
Waitms 200
Led = 1
Waitms 200
Led = 0
Waitms 200
Led = 1
Waitms 200
Led = 0
Waitms 200
Led = 1
Waitms 200
Led = 0
Waitms 200
Led = 1
Waitms 200
Led = 0
Waitms 200
End Sub

Button:
Call Melodi1()
GIFR = 64
Return

Спасибо всем кто откликнется! Буду рад любой помощи.

 

1.jpg

ver 1.1.0.bas

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By psinetron
      Здравствуйте. Решил попробовать в деле ATTiny13. Решил начать с самого простого - поморгать светодиодами. ОК, запустил platformIO, скопировал пример - вроде все работает. Светодиод моргает. Но. как только решил поменять значение _delay_ms, то понял, что что-то пошло не так.
      Дело в том, что светодиод моргает вообще игнорируя этот самый delay. Не важно сколько бы ms задержки я там не выставил - получается эпилептическое моргание. 
      Прошиваю через Arduino Uno. AtTiny опробовал пару разных - на второй микрухе тот же самый эффект. Причем если не прописывать включать светодиод - он не горит. Примеры пробовал разные, эффект везде один. Уже и не знаю на что думать
      Пример моего кода:
       
      #define F_CPU 120000UL // Указываем тактовую частоту МК #define LED PB2 // Используем светодиод, подключенный к PB2 (7 пин) #include <avr/io.h> // Подключаем определения ввода/вывода #include <util/delay.h> // Подключаем библиотеку функций задержки int main(void) { // Светодиод DDRB |= (1<<LED); // конфигурируем пин как выход while (1) { PORTB |= (1<<LED); _delay_us(1000L); PORTB &= ~(1<<LED); _delay_ms(10000L); } }  
      На всякий случай конфигурация platformIo:
      [env:attiny13a] platform = atmelavr board = attiny13 ; change microcontroller board_build.mcu = attiny13 ; change MCU frequency board_build.f_cpu = 1200000L upload_protocol = stk500v1 ; each flag in a new line upload_flags = -P$UPLOAD_PORT -b$UPLOAD_SPEED ; edit these lines upload_port = COM3 upload_speed = 19200  
    • By Сергей Фомин
      Изучаю прерывания на attiny13. Пока остановился на прерываниях по переполнению. Сделал тестовый код в Atmel Studio и сразу через программатор заливаю на тиньку со светодиодом. Проблема в том что гореть он должен 10 секунд и выключаться, а горит примерно 20-23 секунды. Прошу помощи в правильном расчёте. Код ниже (пока учусь сильно не ругайтесь) :
      #define F_CPU 1000000 #define LED PB2 #include <avr/io.h> //#include <util/delay.h> #include <avr/interrupt.h> unsigned char work_time =384;    //  1000000/1024/256=3.8  (0.026 сек)    10/0.026=384 volatile unsigned char temp =0; ISR (TIM0_OVF_vect) {      TCNT0=0x00;     temp ++;     if (temp>=work_time)     {         PORTB &=~(1<<LED);  //Инвертируем состояние         TCCR0B=0x00    // остановка таймера         cli (); //общее запрещение прерываний     } } int main (void) {     init();               while (1)     {              } } void init () {          DDRB |= (1<<LED); // выход     PORTB =(1<<LED); //включен     TCCR0B =0x05; // установка делителя на 1024     TIMSK0 |= _BV(TOIE0);     sei();   // Либо SREG |= (1<<SREG_I); //Разрешаем прерывания глобально     TCNT0 = 0X00;        //Обнулить счётный регистр }  
    • By mal333
      Всем привет.
      Есть задачка на 2 пина контроллера посадить 4 кнопки и распознавать их состояние, а так же состояние "ни одна не нажата". Есть схемы подключения их в матрицу R2R и последующее аналоговое измерение, но я почему-то думаю, что можно считывать и чисто цифровым методом. Пораскинув мозгами, получилась эта схема.В ней опрос будет такой- сначала читаем состояние выводов, потом переключаем пины попеременно в 1 и смотрим состояние другого вывода. Может есть схемы проще, но вот что-то не нашел.

    • By Юра Махович
      Доброго времени суток!
      Друг попросил сделать эму некий аппарат: пищалку, которая издает звук с определенным периодом.
      Пример работы: сигнал 2 секунды, тишина 1 минуту, потом опять по новой.

      Так вот, программу написал, и вроде как даже работает, но как-то не стабильно..
      Иногда пропустит один цикл, иногда (почти всегда) после нескольких минут вообще перестает работать.
      Использую сон ради экономии батареи, т.к. устройство автономно.
      Генерирую ШИМ на ноге PB0. переключатели подсоединены к PB3 PB4.
      Прошу помогите найти ошибку, а то я уже не знаю что тут не так..
    • By авмаппипв апиаи
      Доброго времени суток! Имеется такая схема для управления яркостью светодиода и стабилизации по току  , схемы не мои а содраны из разных источников, я их соединил. Прошу мне помочь из проверкой схемы может где что то подправить , доработать в общем помогите мне в этом деле! Питать буду от 18650 через плату заряда с защитой от розряда .  

×
×
  • Create New...