Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн сен 10, 2012 11:33:14
Да, все получилось, барсик один, но для пиков и авров различий много
Здесь можно немножко помяукать :)
https://radiokot.ru:443/forum/
Несколько вопросов, не раскрытых в теме.Kill17 писал(а):Мне нужно сделать ретранслятор уарта, те контроллер принимает посылку и передает. Посылки разные по длине байт. Подскажите, как это реализовать, а то он их режет по 4 байта, не могу победить.
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
Config Portb = Output
Config Portc = Output
Config Portd = Output
Config Portc.1 = Input
Config Portc.0 = Input
Portd.0 = 0
Portd.1 = 0
Portc.4 = 0
Portc.5 = 0
Portd.2 = 1
Speaker Alias Pinb.2
Do
'Celine Dion : : My Heart Will Go On
Sound Speaker , 587 , 1135 'D2(1/2)
Sound Speaker , 659 , 1011 'E2(1/2)
Portd.2 = 0
Sound Speaker , 880 , 388 'A3(1/4)
Sound Speaker , 880 , 758 'A2(1/2)
Sound Speaker , 392 , 850 'G2(1/4)
Sound Speaker , 185 , 901 'Fis2(1/8)
Sound Speaker , 659 , 1011 'E2(1/2)
Sound Speaker , 370 , 901 'Fis2(1/4)
Sound Speaker , 392 , 850 'G2(1/4)
Sound Speaker , 740 , 901 'Fis2(1/2)
Sound Speaker , 330 , 1011 'E2(1/4)
Sound Speaker , 294 , 1135 'D2(1/4)
Sound Speaker , 277 , 1203 'Cis2(1/4)
Sound Speaker , 587 , 1135 'D2(1/2)
Sound Speaker , 277 , 1203 'Cis2(1/4)
Sound Speaker , 3952 , 337 'H3(1/1)
Sound Speaker , 3440 , 388 'A3(1/1)
Sound Speaker , 1175 , 1135 'D2(1/1)
Sound Speaker , 659 , 1011 'E2(1/2)
Sound Speaker , 880 , 388 'A3(1/4)
Sound Speaker , 880 , 758 'A2(1/2)
Sound Speaker , 392 , 850 'G2(1/4)
Sound Speaker , 185 , 901 'Fis2(1/8)
Sound Speaker , 659 , 1011 'E2(1/2)
Sound Speaker , 370 , 901 'Fis2(1/4)
Sound Speaker , 392 , 850 'G2(1/4)
Sound Speaker , 740 , 901 'Fis2(1/2)
Sound Speaker , 330 , 1011 'E2(1/4)
Sound Speaker , 294 , 1135 'D2(1/4)
Sound Speaker , 277 , 1203 'Cis2(1/4)
Sound Speaker , 587 , 1135 'D2(1/2)
Sound Speaker , 277 , 1203 'Cis2(1/4)
Sound Speaker , 277 , 1203 'Cis2(1/4)
Sound Speaker , 587 , 1135 'D2(1/2)
Sound Speaker , 330 , 1011 'E2(1/4)
Sound Speaker , 740 , 901 'Fis2(1/2)
Sound Speaker , 659 , 1011 'E2(1/2)
Sound Speaker , 1175 , 1135 'D2(1/1)
Wait 2
Loop
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
Config Watchdog = 2048
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
Config Watchdog = 2048
...
...
...
Sound Speaker , 659 , 1011 'E2(1/2)
Portd.2 = 0
Stop Watchdog
...
...
...ut1wpr писал(а):Несколько вопросов, не раскрытых в теме.Kill17 писал(а):Мне нужно сделать ретранслятор уарта, те контроллер принимает посылку и передает. Посылки разные по длине байт. Подскажите, как это реализовать, а то он их режет по 4 байта, не могу победить.
1. Ретрансляция только в одну сторону?
2. Поддерживает ли примененный вами МК прерывание по изменению состояния пина?
3. На какой максимальной скорости предполагается работа?
Если на первые два вопроса ответ положительный, а скорость не выше 19200, то можно обойтись вообще без применения UARTa.
Вот только на Бейсике я это не реализовывал. Очень ресурсожрущий он, увы. Много не позволяет. А жаль.
По второму вопросу это не ответ. Вам надо заглянуть в ДШ на примененный контроллер.Kill17 писал(а):2 - нет, только передача даных
Так подправь исходник , что я давал , на сколько надо . А причём тут ЕЕПРОМ ?...Kill17 писал(а):Большое спасибо, все работает, но принимать мне необходимо от 4 до 125 байт в посылке, а буфер соответственно с этим не справляется, возможно сделать это через запись в ЕЕПРОМ или все это бесполезно? Посоветуйте, какие еще есть выходы из данной ситуации?
Да уж! Организация приемного буфера в EEPROM - это реально круто!dimon-790 писал(а):А причём тут ЕЕПРОМ ?...
Это да, есть такое.ut1wpr писал(а):Особенно временнЫми параметрами.
Так и должно работать. Этот бит означает перманентное включение WDT, программно управлять им после этого не получится. Отключите его и тогда пользуйтесь командами Start и Stop.ev3658 писал(а):В прошивке (через поню) отключаю бит, отвечающий за сторожевой таймер WTDON, начинает работать МК, с ним в ребут, время ребура могу регулировать, а вот отключать сторожевой таймер не могу. Может чего, кто сталкивался?
Не надо было людям голову морочить. Объяснять задачу надо сразу, а не порциями.Kill17 писал(а):Так, раскрою задумку.
От контроллера требуется только одно, принимать байты(много байт) на скорости 115200 и выводить на скорости 9600. Все, от него больше ничего не нужно).
Я не силен в программировании контроллеров, это практически первый мой опыт, поэтому многое не понимаю, к примеру ---есть ли в нем вектор прерывания по изменению состояния пина--------, а так же ---про Еепром временной не понял ничего.
dimon-790. Ваш исходник работает превосходно, но увеличении буфера приводит к ошибки при компиляции, если я правильно понял, то проблема в характеристиках контроллера (аттини2313)
Да как не работает-то? Например, если написать подобный код:ev3658 писал(а):reset сторожевого таймера не работает тоже
Код: Выделить всё
$regfile = "m8def.dat" ' тип МК
$crystal = 4000000 ' выбор кристала для расчета задержек
Config Portb.0 = Output ' светодиод
Config Watchdog = 128 ' сторожевой таймер настроен на 130 мс
Start Watchdog ' запуск сторожевого таймера
Do ' основной цикл мигания светодиодом
Waitms 150 ' задержка частоты мигания
Toggle Portb.0 ' меняем состояние светодиода на противоположное
Loop ' конец цикла
Код: Выделить всё
$regfile = "m8def.dat" ' тип МК
$crystal = 4000000 ' выбор кристала для расчета задержек
Config Portb.0 = Output ' светодиод
Config Watchdog = 128 ' сторожевой таймер настроен на 130 мс
Start Watchdog ' запуск сторожевого таймера
Do ' основной цикл мигания светодиодом
Waitms 75 ' первая часть задержки
Reset Watchdog ' сброс сторожевого таймера
Waitms 75 ' вторая часть задержки
Reset Watchdog ' сброс сторожевого таймера
Toggle Portb.0 ' меняем состояние светодиода на противоположное
Loop
Код: Выделить всё
Dim Digit As Byte
Dim Key As Byte
Select Case Key '
Case 1 : Digit = 7
Gosub Nabor
Case 2 : Digit = 8
Gosub Nabor
Case 3 : Digit = 9
Gosub Nabor
Case 4 : Gosub Menu
Case 5 : Digit = 4
Gosub Nabor
Case 6 : Digit = 5
Gosub Nabor
Case 7 : Digit = 6
Gosub Nabor
Case 8 : Gosub Str_up
Case 9 : Digit = 1
Gosub Nabor
Case 10 : Digit = 2
Gosub Nabor
Case 11 : Digit = 3
Gosub Nabor
End Select
Вроде да, почему нет?dimon-790 писал(а):Хвостатые подскажите кто в курсе , корректно-ли в данном случае используется оператор "case" ?