BASCOM AVR в вопросах и ответах
2omike
последний пост Luciano
http://www.mcselec.com/index2.php?optio ... quare+wave
последний пост Luciano
http://www.mcselec.com/index2.php?optio ... quare+wave
Код: Выделить всё
Code:
$regfile = "ATtiny2313.DAT"
$crystal = 20000000
$hwstack = 32
$swstack = 16
$framesize = 40
Dim Compare_value as Word
' ==================
' Clear Timer on Compare (CTC mode), Top= OCR1A
' OC1B PIN toggled at compare match
' (No prescaling)
TCCR1A=&H10
TCCR1B=&H09
OCR1AH=&H00
OCR1AL=&H00
' ==================
Config PinB.4 = Output ' OC1B PIN
Do
For Compare_value = 0 to 9
Compare1A = Compare_value
Waitms 5000
Next Compare_value
Loop
End
' When you run the above code you will get a square wave
' with these frequencies: (System clock = 20 MHz)
' Compare1A = 0 / Frequency = 10.00 MHz
' Compare1A = 1 / Frequency = 5.00 MHz
' Compare1A = 2 / Frequency = 3.33 MHz
' Compare1A = 3 / Frequency = 2.50 MHz
' Compare1A = 4 / Frequency = 2.00 MHz
' Compare1A = 5 / Frequency = 1.66 MHz
' Compare1A = 6 / Frequency = 1.43 MHz
' Compare1A = 7 / Frequency = 1.25 MHz
' Compare1A = 8 / Frequency = 1.11 MHz
' Compare1A = 9 / Frequency = 1.00 MHz
2omike
дык, это.
Почитайте даташит со словарем или скачайте книжек по авр'кам на русском, раздел про таймеры, среди прочих, пользы будет много больше.
вот на русском документация
http://www.gaw.ru/html.cgi/txt/doc/micros/avr/index.htm
там где про архитектуру
дык, это.
Почитайте даташит со словарем или скачайте книжек по авр'кам на русском, раздел про таймеры, среди прочих, пользы будет много больше.
вот на русском документация
http://www.gaw.ru/html.cgi/txt/doc/micros/avr/index.htm
там где про архитектуру
На всякий случай:
Bascom AVR 1.11.8.1 + crack
Скачать:
----------
http://depositfiles.com/files/4j0vti0t9
http://depositfiles.com/files/m3t5rjho3
----------
Может еще кому надо
Bascom AVR 1.11.8.1 + crack
Скачать:
----------
http://depositfiles.com/files/4j0vti0t9
http://depositfiles.com/files/m3t5rjho3
----------
Может еще кому надо
The only one thing necessary for the triumph of evil ...is for good people to do nothing.
Здаровки всем!
Извиняюсь, мож я не в тему немножко попал, но вот вопросик:
Как вывести результаты измерения АЦП на 7-и сегментный индикатор (три разряда, последний показывает десятые)? Не могу сообразить как нормально сделать преобразования для сегментов.Подскажите,плиз!
Использую мегу8 и 1мгц такта
Извиняюсь, мож я не в тему немножко попал, но вот вопросик:
Как вывести результаты измерения АЦП на 7-и сегментный индикатор (три разряда, последний показывает десятые)? Не могу сообразить как нормально сделать преобразования для сегментов.Подскажите,плиз!
Использую мегу8 и 1мгц такта
Найдено в сети.
(Качество не очень)
Marcin Wiązania
Programowanie mikrokontrolerów AVR w języku BASCOM .
PDF 21,2 Mb
(добавил листинги)
http://www.onlinedisk.ru/file/104744/
С наилучшими пожеланиями VladI+ !
(Качество не очень)
Marcin Wiązania
Programowanie mikrokontrolerów AVR w języku BASCOM .
PDF 21,2 Mb
(добавил листинги)
http://www.onlinedisk.ru/file/104744/
С наилучшими пожеланиями VladI+ !
ya-zp писал(а):Здаровки всем!
Извиняюсь, мож я не в тему немножко попал, но вот вопросик:
Как вывести результаты измерения АЦП на 7-и сегментный индикатор (три разряда, последний показывает десятые)? Не могу сообразить как нормально сделать преобразования для сегментов.Подскажите,плиз!
Использую мегу8 и 1мгц такта
Немного надо исправить .
Код: Выделить всё
'Индикатор 3x7 с общим катодом ( например от АОНа )
'PD0-A,PD1-B,PD2-C,PD3-D,PD4-E,PD5-F,PD6-G,PD7-DP
'PB0-1p,PB1-2p,PB2-3p
'катоды разрядов индикатора подключены -NPN транзисторы
'Резистор переменный - 1 корпус
' 10 Kom 2 питание 5V
' 3 (средний ) - вход ADC0
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Declare Sub Lednum
Declare Sub Adconverter
Dim N0 As Long , N1 As Word , N2 As Word , N3 As Word , M As Word
Dim Led(10) As Byte
Led(1) = &B00111111
Led(2) = &B00000110
Led(3) = &B01011011
Led(4) = &B01001111
Led(5) = &B01100110
Led(6) = &B01101101
Led(7) = &B01111101
Led(8) = &B00000111
Led(9) = &B01111111
Led(10) = &B01101111
Do
Start Adc
N0 = Getadc(0)
Call Adconverter
Call Lednum
Portb = &B00000001
Portd = Led(n1)
Waitms 5
Portb = &B00000010
Portd = Led(n2)
Waitms 5
Portb = &B00000100
Portd = Led(n3) + &B10000000
Waitms 5
Loop
End
Sub Adconverter
N0 = N0 * 1000
N0 = N0 / 2048
End Sub
Sub Lednum
N3 = N0 / 100
M = N0 Mod 100
N2 = M / 10
N1 = M Mod 10
N3 = N3 + 1
N2 = N2 + 1
N1 = N1 + 1
End Sub-
Pasha
- Родился
- Сообщения: 8
- Зарегистрирован: Пн мар 30, 2009 00:36:53
- Откуда: Запорожье
- Контактная информация:
ya-zp писал(а):Здаровки всем!
Извиняюсь, мож я не в тему немножко попал, но вот вопросик:
Как вывести результаты измерения АЦП на 7-и сегментный индикатор (три разряда, последний показывает десятые)? Не могу сообразить как нормально сделать преобразования для сегментов.Подскажите,плиз!
Использую мегу8 и 1мгц такта
Ну я бы сделал примерно так:
Код: Выделить всё
$regfile = "m8def.dat" ' мега8
$crystal = 8000000
Config Portb = Output , Portd = Output 'конфигурируем порты на выход
Dim I As Byte , X As Byte , Y As Byte , Temp As Integer , Bn(10) As Byte , Cifri(5) As Integer 'задаем всякие переменные и масивы '
Restore Dta ' говорим из какой таблици нужно заносить данные в масив
For I = 1 To 10 ' начало цикла
Read Bn(i) ' поочериде заносим ячейки из таблици в масив
Next ' конец цикла
Config Timer0 = Timer , Prescale = 1 ' конфигурируем таймер 0 чтоб потом на него повесить алгоритм отображения цифр
On Timer0 Pulse ' назначаем подпрограмму, которая будет запускатся по переполнению 0го таймера
Enable Interrupts 'разрешаем прерывания
Enable Timer0 'разрешаем таймер0
Config Adc = Single , Prescaler = Auto , Reference = Avcc ' конфигурируем ADC
Start Adc ' запускаем ADC
Do ' начало основного цикла
Temp = Getadc(0) ' к примеру 1021
For I = 1 To 4 ' цикл разбиения числа TEMP на цифры и занесения каждой в таблицу масива
Cifri(i) = Temp Mod 10 ' берем последнюю цифру (1)
If Cifri(i) = 0 Then '
Cifri(i) = 10 '
Goto T '
End If '
Temp = Temp - Cifri(i) ' вычитаем из TEMP последнюю цифру 1021-1=1020
T: '
Temp = Temp / 10 ' отбрасываем последний ноль 1020/10=120
Next 'возвращаемся к началу цикла и заносим следующюю цифру в масив
Waitms 100 ' задержка
Loop 'конец основного цикла
End '
'
Pulse: ' подпрограмма прерываний таймера0
Incr X ' увеличиваем х на единицу, для выбора нужных цифр из таблици
Portb = &HFF ' гасим индикатор
Portd = Bn(cifri(x)) ' подаем на индикатор цифру из масива Bn с номером cifri(x)
Y = X - 1 ' считаем какую конкретно цифру, из 4х нужно сейчас зажечь
Reset Portb.y ' зажигаем нужную цифру под номером игрик
If X = 4 Then X = 0 ' обнуляем х при достижении его величины 4
Return ' возвращаемся на место откуда прервали программу
Dta: ' таблица с данными о цифрах зажигает по порядку : 1234567890
Data &H88 , &HB3 , &HBA , &HD8 , &H7A , &H7B , &HA8 , &HFB , &HFA , &HEBстрочку дата подбираем под свой индикатор
-
Radan
- Мучитель микросхем
- Сообщения: 465
- Зарегистрирован: Ср июн 21, 2006 08:24:32
- Откуда: Лисичанск
- Контактная информация:
Gryphon писал(а):Здравствуйте! Вот хотел узнать, как на меге8 и ЖКИ сделать индикатор звука (стереофонический).
AN #107 - Logarithmic bar graph (LED and LCD)
http://www.mcselec.com/index.php?option ... &Itemid=57
Здесь правда на 2313, но я думаю, на мегу 8 можно перевести без большого труда.
- Shuriks
- Первый раз сказал Мяу!
- Сообщения: 24
- Зарегистрирован: Вт дек 30, 2008 20:51:09
- Откуда: Россия, г. Брянск
- Контактная информация:
dimon-790 писал(а):Задействовать PORT A в TINY2313 комуто доводилось? поделитесь опытом плиз...
Делюсь опытом , для Всех ... А не просто сказать - получилось и .. все
1. В ATtiny2313 порты PORT A0 и PORT A1 становятся доступными , если применять внутренний тактовый генератор.
2. PORT A2 становится доступным , если запрограммировать фьюз RESET DISABLE (ахтунг !!! .. в режиме ISP микроконтроллер перестанет шиться , но можно все вернуть с помощью параллельного программатора)
3. PORT A2 ("бывший" reset) ... не является электрически-полноценным портом ... При логической единице , уровень составит 2..3 В . Решение простое - подтягиваем внешним резистором 4.7 кОм к 5 В.