Таймер на ATMega8 в Bascom-AVR

Обсуждаем контроллеры компании Atmel.
Ответить
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

ZN-GAME писал(а): Начало
t=0
Портд.0 = 1
If t=14400 то Портд.0 = 0
Подождать 3 секунды
End if
Портд.0 = 1
Конец
так вы уже все и написали, перевести и поправить
Dim t As Integer
t=0
portd.0=0
do
If t=14400 then
portd.0=1
wait 3
portd.0=0
t=0
end if
incr t
wait 1
loop
end
Реклама
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

Это мы быстро научим.
Давайте начнем с подсчета временных промежутков.
Источником тактового сигнала выберем внутренний генератор. На какой частоте будет работать ваш? Ну допустим 1Мгц.
Удобно использовать таймер в таких целях

Еще там есть таймер Т1,он может досчитать от 0 и максимум до 65535"тиков"
До скольки может досчитать таймер Т1 в секундах?
Правильно: до 1/(1000000/65536) = 0.065536 Сек. мало мне кажется.
Еще в таймере есть такая штука - предделитель. Она может "замедлять" таймер в 1,8,64,256 или 1024
раз.
Допустим берем делитель 1024. Значит таймер может досчитать максимум до
0.065536сек*1024= 67,108864Сек. Вроде ближе к теме. Удобно считать?Не хрень какая-то получилась
А если таймер не будет досчитывать до своего МАХ ? а досчитает скажем до 58593.
Что будет?
Последний раз редактировалось vek Пн окт 07, 2013 19:53:54, всего редактировалось 2 раза.
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Реклама
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

pavel1979 писал(а):

Dim t As Integer
t=0
portd.0=0
do
If t=14400 then
portd.0=1
wait 3
portd.0=0
t=0
end if
incr t
wait 1
loop
end
чего-то недоеду с какой скоростью будет Т инкременироваться?Как компилятор пожелает?
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

чего-то недоеду с какой скоростью будет Т инкременироваться?Как компилятор пожелает?
снизу 3 строка-wait 1-задержка 1 сек,задано в упор,компилятор пусть как хочет так и пусть делает,но переменную каждую сек увеличивать будет,главное указать ему тип мк и частоту,которую поставили в фузах
Вложения
Безымянный.gif
(36.24 КБ) 491 скачивание
Реклама
Эиком - электронные компоненты и радиодетали
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

А...тут как-то грустно получается....Я считаю делители там всякие,а вы чит-код delay_us() :))
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Реклама
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

ну можно и через прерывания,если поставить кварц скажем 8 мгц,задать коэф деления кварца,тогда и выдержки будут стабильнее и т д хорошая обучалка http://decada.org.ru/project/lessons/bascom_avr/10/
кстати,vek,а что за язык на предыдущей странице?си?или ассемблер?
Реклама
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

pavel1979 писал(а):снизу 3 строка-wait 1-задержка 1 сек,задано в упор
Просто бейсика раньше в глаза не видел,немного растерялся поначалу.Это ведь бейсик?
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

так и тема Таймер на ATMega8 в Bascom-AVR,практически бейсик,только несколько другой синтаксис
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

ф-ф-ф :)) А я на себя одеяло тяну :)) Асм-ы всякие подразумеваю :)) или С# какие-нибудь :)
Очень смутно представлял себе что такое баском :oops:
А wait - это стандартный макрос? секунды подразумевает? А если мСек или мкСек надо? есть такие?

Какую-то муть пишут,вот цитата от туда "Все прерывания в AVR имеют одинаковый приоритет."
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

vek писал(а):ф-ф-ф :)) А я на себя одеяло тяну :)) Асм-ы всякие подразумеваю :)) или С# какие-нибудь :)
Очень смутно представлял себе что такое баском :oops:
А wait - это стандартный макрос? секунды подразумевает? А если мСек или мкСек надо? есть такие?
Какую-то муть пишут,вот цитата от туда "Все прерывания в AVR имеют одинаковый приоритет."[/quote]
1 сек=wait 1
1миллисек=waitms 1
1 микросек=waitus 1
А по Вашему-если в программе несколько прерываний то какое прерывание главнее(приоритетнее)?здесь как в бане-все одинаковые :)
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

Сообщение AlekseyV »

Взлетит?

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

$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 16
$swstack = 16
$framesize = 16
$noramclear
Dim S As Byte

Config Portb.0 = Output
Config Portb.3 = Output

Rel1 Alias Portb.0
Led1 Alias Portb.3
S = 0
Onof(1) = 14400         
Do
If S = 14401 Then                                                                        
         S = 0
Else
         Incr S
End If
If S = Onof(1) Then
	Rel1 = 1
        Wait 3
        Rel1 = 0
End If
Led1 = 1
Waitms 500
Led1 = 0
Waitms 434
Loop
End
Return
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 16
$swstack = 16
$framesize = 16
$noramclear
Dim S As Byte переменная byte может быть не менее 255,лучше поставить integer-до 65535

Config Portb.0 = Output
Config Portb.3 = Output

Rel1 Alias Portb.0
Led1 Alias Portb.3
S = 0
Onof(1) = 14400 необьявленная переменная
Do
If S = 14401 Then
S = 0
Else
Incr S
End If все пишем в 1 строчку-If S = 14401 Then S = 0 Else Incr S
If S = Onof(1) Then
Rel1 = 1
Wait 3
Rel1 = 0
End If
Led1 = 1
Waitms 500
Led1 = 0
Waitms 434 светодиод будет моргать постоянно
Loop
End
Return
если точность не важна-работать должен
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

pavel1979 писал(а):Dim S As Byte переменная byte может быть не менее 255,лучше поставить integer-до 65535
Байт - от 0 до 255, во вторых, integer это знаковый тип, поэтому значение его от -32768 до +32767.
Беззнаковый двухбайтовый тип это word.
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

А,точно,и частоту сделать 8 мгц,это частота нового мега8
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

pavel1979 писал(а): А по Вашему-если в программе несколько прерываний то какое прерывание главнее(приоритетнее)?здесь как в бане-все одинаковые :)

А если одновременно придут прерывание по переполнению Т1 и от компаратора,какое сработает первым.Если приоритет одинаков?
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

цитата из справочника bascom:
"Приоритеты прерываний

В микроконтроллерах AVR отсутствует механизм перераспределения векторов прерывания. При наличии условий возникновения нескольких прерываний первым обрабатывается находящееся выше в списке векторов (с меньшим адресом). Когда происходит прерывание, то остальные оказываются автоматически запрещенными, вследствие очистки (сброса) бита I. То есть, по умолчанию, вложенные прерывания невозможны. Обеспечение вложенности прерываний осуществляется программным методом. Для этого достаточно в начале программы обработки прерывания вновь установить бит I."
не сталкивался с таким,кстати,в bascom можно вставлять ассемблерные вставки,можно вообще все написать на асм и откимпилировать,
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

Ну вот и ладненько,а тут http://decada.org.ru/project/lessons/bascom_avr/10/ как-то в
заблуждение вводят.
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

Сообщение AlekseyV »

Прошил этим:

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

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 16
$swstack = 16
$framesize = 16
$noramclear
Dim S As Word

Config Portd.0 = Output
Config Portc.5 = Output

Rel1 Alias Portd.0
Led1 Alias Portc.5
S = 0
Do
If S = 61 Then S = 0 Else Incr S
If S = 60 Then
Rel1 = 1
Waitms 100
Rel1 = 0
End If
Led1 = 1
Waitms 500
Led1 = 0
Waitms 500
Loop
End
Return
Светодиод моргает, но не в такт секунде, т.е. слишком медленно. Пробовал ставить wait 1 - также.
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

Насколько медленно? В 8 раз? в 4 раза?
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Сообщение pavel1979 »

какие фузы ставили?я както делал кухонный таймер,без кварца,за час отставало минуты на 2-3,этого хватило
Ответить

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