Страница 16 из 304

Добавлено: Вт июн 16, 2009 13:17:50
Radan
Посмотри здесь - http://bascom.at.ua/publ/1-1-0-9

Добавлено: Ср июн 17, 2009 08:47:50
константин_KoSS_89
Radan писал(а):Посмотри здесь - http://bascom.at.ua/publ/1-1-0-9
Возможно я нуб...ну немогу я понять как этот шим устроен :o
Так и не разобрался, Таймер-0 переключает группы светиков или тоже участвует в ШИМе
Если несложно наваяй маленькую прожку (Для ATtiny2313) , чтоб сама яркость меняла на светике, сначала повышала, как наберёт полную яркость то понижала... :roll:
Очень хочу понять принцып! Ага?
И ещё, как выводиться на порты инфа записанная в DATA ?

Добавлено: Чт июн 18, 2009 08:15:29
Radan
В основном цикле программы пишем изменение переменных яркости 3 цветов:

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

Do

For R = 0 To 255
Waitms 10
Next R

For B = 255 To 0 Step -1
Waitms 10
Next B

For G = 0 To 255
Waitms 10
Next G

Loop
В событии Таймер-0 происходит увеличение переменной PWM на 1.
Если значение R, G, B > 0 , то при значении PWM = 0 включим соответствующие порты (Set R, Set G Set B)
Если значение R, G, B совпало с PWM, отключим соответствующий канал.
Когда PWM достигнет 255, сбросим её в 0 и выключим R, G, B (Reset R, Reset G, Reset B). И так по кругу.
Таким образом, порты будут включены на 1-255 тактов таймера 0. Чем больше тактов включено, тем ярче горит светодиод. Для равномерного восприятия яркости глазом, необходимо учесть логарифмическую зависимость. В приведённой выше ссылке это реализовано.

Добавлено: Чт июн 18, 2009 09:32:46
константин_KoSS_89
Короче нифига я непонял. Вот, как я понял...Но оно не работает :oops:
$regfile = "2313def.dat"
$crystal = 4000000
Config Portd = Output
Config Portb = Output
Dim Pwm As Byte , A As Byte

Config Timer0 = Timer , Prescale = 1
Enable Interrupts
Enable Timer0
On Timer0
Start Timer0
Pwm = Timer0

Do
Reset Portd
Config Pind.3 = Input
Config Pind.4 = Input

Set Portd.3
Set Portd.4
Debounce Pind.3 , 0 , Pwm_plus
Debounce Pind.4 , 0 , Pwm_minus

Pwm_plus:
Incr Pwm
Waitms 100
Return

Pwm_minus:
Decr Pwm
Waitms 100
Return

For A = 0 To 255
Waitms 10
Next A
If A > 0 Then Gosub 1

1:
If Pwm = 255 Then
Pwm = 0
Portb = 00
If Pwm > 0 Then Portb.1 = 1
Return

Loop
End If
End
Слушай ну пожалуйсто помоги, ну очень хочу разобраться

Добавлено: Чт июн 18, 2009 10:16:14
константин_KoSS_89
В теории я ход всего понял:
Таймер-0 подсчитывает импульсы и записывает их количество в переменную PWM.
Далее идёт сравнение PWM и другой переменной и.т.д....

Просто непойму как это реализовать програмно.

Добавлено: Чт июн 18, 2009 11:31:58
Radan
Попробуй так:

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

$regfile = "2313def.dat"
$crystal = 4000000

Config Portb = Output

Config Timer0 = Timer , Prescale = 1
Enable Interrupts
Enable Timer0
On Timer0 Timer0isr
Start Timer0

Dim Pwm As Byte , A As Byte
Pwm = 0

Do


For A = 0 To 255
Waitms 10
Next A

For A = 255 To 0 Step -1
Waitms 10
Next A

Loop


Timer0isr:
Incr Pwm

If Pwm > A Then Portb = 1

If Pwm = 255 Then
Pwm = 0
Portb.0 = 0
End If
Return

Добавлено: Чт июн 18, 2009 14:22:29
константин_KoSS_89
Большое спосибо. Наконецто!!!!
Можно небольшие подробности:
Что означает "Prescale = 1" "Step -1"
Строчка "On Timer0 Timer0isr" - означает, - включить таймер-0 и при переполнении перйти на "Timer0isr" -- ???

Спосибо за внимание, если будут вопросы в дальнейшем - поможешь..
очень хочу разобраться хоь с эти языком... :lol:

Добавлено: Пт июн 19, 2009 08:01:03
Radan
Step -1 - это шаг в цикле со значением -1. Т.е. в данном примере будет считать так: 255, 254, 253 ... 3, 2, 1, 0.

Prescale = 1 - это делитель для таймера. Выбирается из стандартного ряда - 1, 64, 256

On Timer0 Timer0isr - при срабатывании таймера перейти на Timer0isr

Об этом всём можно почитать в руководстве по ВАСИКУ на английском или здесь http://bascom.at.ua/load/ на русском.

Добавлено: Пт июн 19, 2009 09:25:47
константин_KoSS_89
Ещё раз спосибо! Очень хороший сайт... :))

Добавлено: Пт июн 19, 2009 22:13:39
saschai
Генератор случайных чисел, в Бэйсике был, не могу найти :))
Если такого нет, то как организовать?
Заранее спасибо

Добавлено: Пт июн 19, 2009 23:19:11
pavel123
var = RND( limit )
Кажись, так.

Добавлено: Сб июн 20, 2009 00:08:19
saschai
Спасибо!

Добавлено: Сб июн 20, 2009 01:48:21
константин_KoSS_89
Здрасти, я долго ждать не заставил.... :)) ШУТКА
Собственно вопрос: имеем - между PORTB , PORTD.6 и PORTD.0 , PORTD.1 , PORTD.2 включены светики ( АНОДАМА НА PORTB , PORTD.6 ) как реализовать эффекты с помощью оператора DATA 1 , 2 , 3 , n...?????
Точнее как правельно записать значения в таблицу ( какое число равно какому порту по счёту, или как происходит вывод инфы)
И как значения этой таблицы вывести на порты?

Просмотрел на этом http://bascom.at.ua/load/ сайте всё чё мона. но так и не понял...

Да и ШИМ регулировка яркости отдельно работает, а вот в свою прогу засандалить тож невыходит, иль хотяб чтоб кнопками яркость регулировать для нескольких светиков тож ума не приложу

Прошу прощения за сопли на форуме, просто запутался совсем, а разобраться охота.

По каким пасобиям учились вы? Я всё, что не читал, либо вобше непойму, либо там скубные примеры, которые даже я придумаю....

Всем СПОСИБО![/quote]

Добавлено: Сб июн 20, 2009 11:13:39
VladI+
VladI+ писал(а):Найдено в сети.
(Качество не очень)

Marcin Wiązania
Programowanie mikrokontrolerów AVR w języku BASCOM .
PDF 21,2 Mb
(добавил листинги)

http://www.onlinedisk.ru/file/104744/

С наилучшими пожеланиями VladI+ !
Немного поработал и сделал файл в формате DJVU (6,8 Mb)
Разрезал страницы,выровнял.
Качаем-
http://www.onlinedisk.ru/file/163438/

Добавлено: Сб июн 20, 2009 11:50:25
saschai
По каким пасобиям учились вы? Я всё, что не читал, либо вобше непойму, либо там скубные примеры, которые даже я придумаю....
Самый лучший учебник, чужие исходники :))

Добавлено: Сб июн 20, 2009 12:49:51
константин_KoSS_89
saschai писал(а):
По каким пасобиям учились вы? Я всё, что не читал, либо вобше непойму, либо там скубные примеры, которые даже я придумаю....
Самый лучший учебник, чужие исходники :))
Да, но в этих исходниках всё так запутано и есть такие "фразы" которых в своей справке я ненахожу.
Вобщем всё что у меня из справок я вложу в архив, может пригодиться кому....

Жду ещё умных мыслей :)

Добавлено: Сб июн 20, 2009 12:50:51
константин_KoSS_89
В один архив не влезло.
Остатки...

Добавлено: Сб июн 20, 2009 14:06:49
AVRDaemon
привет народ снова =)

делаю сейчас меню для LCD
примеров не нашел...

так вот...
как мне на выходе получить типа M1 для вывода константы?
такой код не рабит как положено..

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

Increm:
Incr I
Cls
If I = 1 Then Lcd M1 '--|
If I = 2 Then Lcd M2 '--| вывожу константу на жки 
If I = 3 Then Lcd M3 '--|
If I = 3 Then I = 1 ' переход на 1 первый пункт меню
Goto Debo 'переход к опросу кнопок
Return
а код типа M ; I на жки выводит мне 01,02,03 = некатит кароч...
есть ли другой способ получить M1 M2 M3 на выходе жки?

Добавлено: Вс июн 21, 2009 21:33:41
pavel123
Здрасте,
Не могу заставить работать ds18s20 в протеусе. Постоянно 0 показывает. Может есть у кого рабочий код. Посмотреть, да разобраться в своих ошибках.
Спасибо.

Добавлено: Вс июн 21, 2009 23:42:40
константин_KoSS_89
pavel123 писал(а):Здрасте,
Не могу заставить работать ds18s20 в протеусе. Постоянно 0 показывает. Может есть у кого рабочий код. Посмотреть, да разобраться в своих ошибках.
Спасибо.
$regfile = "2313def.dat"
$baud = 9600
$crystal = 4000000
Config Lcd = 16 * 1
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6
Config 1wire = Portd.5
Dim Byte0 As Byte
Dim Byte1 As Byte
Dim Signtemperatura As String * 1
Dim T1 As Byte
Dim T2 As Byte
Dim I As Integer
Do
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
Byte0 = 1wread()
Byte1 = 1wread()
If Byte1 >= 248 Then
Byte0 = &HFF - Byte0
Byte1 = &HFF - Byte1
Signtemperatura = "-"
Else
Signtemperatura = "+"
End If
T1 = Byte0 / 16
T2 = Byte1 * 16
T1 = T1 + T2
Cls
Lcd Signtemperatura ; T1 ; "C"
Wait 2
Loop
End
Думаю это рабочий код.