Добавлено: Пн мар 16, 2009 22:08:06
Вопрос к Shuriks? Забыл про меня ? 
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Код: Выделить всё
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
Немного надо исправить .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Ну я бы сделал примерно так: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 , &HEBAN #107 - Logarithmic bar graph (LED and LCD)Gryphon писал(а):Здравствуйте! Вот хотел узнать, как на меге8 и ЖКИ сделать индикатор звука (стереофонический).
Делюсь опытом , для Всех ... А не просто сказать - получилось и .. всеdimon-790 писал(а):Задействовать PORT A в TINY2313 комуто доводилось? поделитесь опытом плиз...
А вы пробовали вернуть ?Shuriks писал(а):в режиме ISP микроконтроллер перестанет шиться , но можно все вернуть с помощью параллельного программатора)
Без проблем ... На работе программатор "Тритон" . Снимаем галку на RESET DISABLE (или просто меняем на противоположное) . Пишем фьюзы ... Все ... Работаем дальше с МК , с последовательным программаторомikarab писал(а): А вы пробовали вернуть ?