BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
Отключили JTAG ?
viewtopic.php?f=20&t=35867&start=40
viewtopic.php?f=20&t=35867&start=40
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
нет,переделал плату под другой порт,удалось немного упрвлять rda5807,мучаю ее дальше...
-
dimon-ru-80
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Ср ноя 19, 2014 17:13:21
- Откуда: Украина, Никополь
Re: BASCOM AVR в вопросах и ответах
Уважаемые коты подскажите решение. Суть вопроса такова, хочу сделать автоматическую выключалку света на ультразвуковом датчике HС-SR04. Сделал монтажку, написал код. Алгоритм следующий:
по переполнению таймера происходит замер расстояния от датчика. В основном цикле происходит сравнение min и max значения расстояния с измеренным. Если измеренное расстояние больше max или меньше min значений, то включается свет. max и min значения назначаются при нажатии на кнопку установки (происходит замер расстояния и присваиваются max и min значения). Так вот - через какой то промежуток времени max значение самопроизвольно меняется (без нажатия кнопки установки) и свет не гаснет потому что выполняется условие - измеренное расстояние больше max значения. Не пойму где ошибся - подскажите, код ниже:
$crystal = 8000000
$framesize = 40
$hwstack = 40
$swstack = 40
$baud = 4800
'---------- используемые библиотеки ----------
$lib "glcd-Nokia1100.lib"
Dim A As Word
Dim B As Word
Dim S As Single
Dim G As Single
Dim Pstring As String * 8
Dim S_max_string As String * 8
Dim S_min_string As String * 8
Dim S_max As Single
Dim S_min As Single
Config Pinc.1 = 0 : Portc.1 = 1
S1 Alias Pinc.1
Config Portb.0 = Output
Portb.0 = 0
'---------- конфигурация LCD Nokia1110 ----------
Config Graphlcd = 128x64sed , Cs1 = Portc.2 , Si = Portc.4 , Sclk = Portc.5 , Rst = Portc.3
Const Negative_lcd = 0
Const Mirror_y = 0
Const Mirror_x = 1
Initlcd
Cls
' ******************** настраиваем порты для HC-SR04***********************************************
Config Portd.7 = Input
Config Portd.6 = Output
Trigger Alias Portd.6
Trigger = 0
Const K = 0.1725
Config Timer1 = Timer , Prescale = 64
On Timer1 Замер
Enable Timer1
Enable Interrupts
'**************************************************************************************************
Начало:
Do
Debounce S1 , 0 , Установка
Disable Interrupts
If S > S_max Or S < S_min Then Portb.0 = 1 Else Portb.0 = 0
Enable Interrupts
Pstring = Fusing(s , "###.#")
S_max_string = Fusing(s_max , "###.#")
S_min_string = Fusing(s_min , "###.#")
Setfont Font6x8
Lcdat 1 , 20 , "Измеритель"
Lcdat 2 , 20 , "расстояния"
Setfont Font12x16dig
Lcdat 4 , 0 , " " ; Pstring ; " "
Setfont Font6x8
Lcdat 7 , 1 , S_min_string ; " "
Lcdat 8 , 1 , S_max_string ; " "
Loop
End
Замер: ' обработка прерывания по таймеру (выполнение замера)
Trigger = 1
Waitus 15
Trigger = 0
Waitus 10
Pulsein A , Pind , 7 , 1
S = A * K
Return
Установка: ' Измерение расстояния и установка min и max значений
Disable Interrupts
Portb.0 = 0
Waitms 3000
Portb.0 = 1
Waitms 3000
Portb.0 = 0
Trigger = 1
Waitus 15
Trigger = 0
Waitus 10
Pulsein B , Pind , 7 , 1
G = B * K
S_max = G + 20
S_min = G - 20
Waitms 3000
Enable Interrupts
Goto Начало
$include "font6x8.font"
$include "font12x16dig.font"
по переполнению таймера происходит замер расстояния от датчика. В основном цикле происходит сравнение min и max значения расстояния с измеренным. Если измеренное расстояние больше max или меньше min значений, то включается свет. max и min значения назначаются при нажатии на кнопку установки (происходит замер расстояния и присваиваются max и min значения). Так вот - через какой то промежуток времени max значение самопроизвольно меняется (без нажатия кнопки установки) и свет не гаснет потому что выполняется условие - измеренное расстояние больше max значения. Не пойму где ошибся - подскажите, код ниже:
Спойлер
$regfile = "m8def.dat"$crystal = 8000000
$framesize = 40
$hwstack = 40
$swstack = 40
$baud = 4800
'---------- используемые библиотеки ----------
$lib "glcd-Nokia1100.lib"
Dim A As Word
Dim B As Word
Dim S As Single
Dim G As Single
Dim Pstring As String * 8
Dim S_max_string As String * 8
Dim S_min_string As String * 8
Dim S_max As Single
Dim S_min As Single
Config Pinc.1 = 0 : Portc.1 = 1
S1 Alias Pinc.1
Config Portb.0 = Output
Portb.0 = 0
'---------- конфигурация LCD Nokia1110 ----------
Config Graphlcd = 128x64sed , Cs1 = Portc.2 , Si = Portc.4 , Sclk = Portc.5 , Rst = Portc.3
Const Negative_lcd = 0
Const Mirror_y = 0
Const Mirror_x = 1
Initlcd
Cls
' ******************** настраиваем порты для HC-SR04***********************************************
Config Portd.7 = Input
Config Portd.6 = Output
Trigger Alias Portd.6
Trigger = 0
Const K = 0.1725
Config Timer1 = Timer , Prescale = 64
On Timer1 Замер
Enable Timer1
Enable Interrupts
'**************************************************************************************************
Начало:
Do
Debounce S1 , 0 , Установка
Disable Interrupts
If S > S_max Or S < S_min Then Portb.0 = 1 Else Portb.0 = 0
Enable Interrupts
Pstring = Fusing(s , "###.#")
S_max_string = Fusing(s_max , "###.#")
S_min_string = Fusing(s_min , "###.#")
Setfont Font6x8
Lcdat 1 , 20 , "Измеритель"
Lcdat 2 , 20 , "расстояния"
Setfont Font12x16dig
Lcdat 4 , 0 , " " ; Pstring ; " "
Setfont Font6x8
Lcdat 7 , 1 , S_min_string ; " "
Lcdat 8 , 1 , S_max_string ; " "
Loop
End
Замер: ' обработка прерывания по таймеру (выполнение замера)
Trigger = 1
Waitus 15
Trigger = 0
Waitus 10
Pulsein A , Pind , 7 , 1
S = A * K
Return
Установка: ' Измерение расстояния и установка min и max значений
Disable Interrupts
Portb.0 = 0
Waitms 3000
Portb.0 = 1
Waitms 3000
Portb.0 = 0
Trigger = 1
Waitus 15
Trigger = 0
Waitus 10
Pulsein B , Pind , 7 , 1
G = B * K
S_max = G + 20
S_min = G - 20
Waitms 3000
Enable Interrupts
Goto Начало
$include "font6x8.font"
$include "font12x16dig.font"
Re: BASCOM AVR в вопросах и ответах
Попробуйте для начала:
1. у дебонсе поставьте параметр SUB, и соответственно завершите пп командой ретурн. Метку Начало удалите.
2. Все метки желательно писать латиницей,хоть оно и работает.
3. Config Pinc.1 = 0 - такой команды нет.
4. поставьте подтягивающий резистор на кнопку 10к
5. схема и фото не помешает
1. у дебонсе поставьте параметр SUB, и соответственно завершите пп командой ретурн. Метку Начало удалите.
2. Все метки желательно писать латиницей,хоть оно и работает.
3. Config Pinc.1 = 0 - такой команды нет.
4. поставьте подтягивающий резистор на кнопку 10к
5. схема и фото не помешает
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
Чтото не вижу-изначально чему равны S_max, G и S_min?
-
dimon-ru-80
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Ср ноя 19, 2014 17:13:21
- Откуда: Украина, Никополь
Re: BASCOM AVR в вопросах и ответах
Civil писал(а):Попробуйте для начала:
1. у дебонсе поставьте параметр SUB, и соответственно завершите пп командой ретурн. Метку Начало удалите.
2. Все метки желательно писать латиницей,хоть оно и работает.
3. Config Pinc.1 = 0 - такой команды нет.
4. поставьте подтягивающий резистор на кнопку 10к
5. схема и фото не помешает
С субпрограммой попробую
Config Pinc.1 = 0 : Portc.1 = 1 если про эту строку - то в часиках польских работает (баском начал осваивать с разбора исходника от них и уже написал свой код под мега32 на форуме есть viewtopic.php?p=2252171#p2252171 ).
Метки все на русском - работает;
В тех же часиках кнопки работают без подтягивающих резисторов (самопроизвольно не переключаются).В модели протеуса видно, что единица на порте стоит (т.е подтянут встроенный резистор в контроллере строкой Portc.1 = 1) Правильнее было бы написать:
Config Pinc.1 = Input : Portc.1 = 1 но работает и Config Pinc.1 = 0 : Portc.1 = 1
http://chipenable.ru/index.php/how-conn ... nopki.html рис.16
S_max, G и S_min исправлю - обнулю их первоначальные значения (сейчас при старте на LCD отображаются значение 0)
Думаю, что S_max и S_min нужно записывать в EEPROM и тогда сбоить не будет. И увидел что пропустил Config Debounce = 10
Вот похожий проект на тиньке http://bezkz.su/publ/shemy/vyklyuchatel ... chike.html
В нем ещё используется watchdog , может и себе его использовать для большей стабильности?
-
dimon-ru-80
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Ср ноя 19, 2014 17:13:21
- Откуда: Украина, Никополь
Re: BASCOM AVR в вопросах и ответах
Когда стал записывать значения min и max в eeprom всё наладилось, сбоев больше нет:
код:
$crystal = 8000000
$framesize = 40
$hwstack = 40
$swstack = 40
$baud = 4800
'---------- переменные и библиотеки ----------
$lib "glcd-Nokia1100.lib"
Dim A As Word
Dim S As Single
Dim Pstring As String * 8
Dim S_max_string As String * 8
Dim S_min_string As String * 8
Dim S_max1 As Eram Single
Dim S_min1 As Eram Single
Dim S_max As Single
Dim S_min As Single
S_max = 0
S_min = 0
Config Pinc.1 = 0 : Portc.1 = 1
S1 Alias Pinc.1
Config Portb.0 = Output
Portb.0 = 0
'---------- конфигурацияì LCD Nokia1110 ----------
Config Graphlcd = 128x64sed , Cs1 = Portc.2 , Si = Portc.4 , Sclk = Portc.5 , Rst = Portc.3
Const Negative_lcd = 0
Const Mirror_y = 0
Const Mirror_x = 1
Initlcd
Cls
' ******************** конфигурация HC-SR04***********************************************
Config Portd.7 = Input
Config Portd.6 = Output
Trigger Alias Portd.6
Trigger = 0
Const K = 0.1725
Config Debounce = 10
Config Timer1 = Timer , Prescale = 64
On Timer1 Замер
Enable Timer1
Enable Interrupts
'**************************************************************************************************
Начало:
Do
S_max = S_max1
S_min = S_min1
Debounce S1 , 0 , Установка
Disable Interrupts
If S > S_max Or S < S_min Then Portb.0 = 1 Else Portb.0 = 0
Enable Interrupts
Pstring = Fusing(s , "###.#")
S_max_string = Fusing(s_max , "###.#")
S_min_string = Fusing(s_min , "###.#")
Setfont Font6x8
Lcdat 1 , 20 , "измеритель"
Lcdat 2 , 20 , "расстояния"
Setfont Font12x16dig
Lcdat 4 , 0 , " " ; Pstring ; " "
Setfont Font6x8
Lcdat 7 , 1 , S_min_string ; " "
Lcdat 8 , 1 , S_max_string ; " "
Loop
End
Замер:
Trigger = 1
Waitus 15
Trigger = 0
Waitus 10
Pulsein A , Pind , 7 , 1
S = A * K
Return
Установка:
Disable Interrupts
Portb.0 = 0
Waitms 3000
Portb.0 = 1
Waitms 3000
Portb.0 = 0
Trigger = 1
Waitus 15
Trigger = 0
Waitus 10
Pulsein A , Pind , 7 , 1
S = A * K
S_max = S + 20
S_min = S - 20
S_max1 = S_max
S_min1 = S_min
Waitms 3000
Enable Interrupts
Goto Начало
$include "font6x8.font"
$include "font12x16dig.font"
Фото во вложении.
код:
Спойлер
$regfile = "m8def.dat"$crystal = 8000000
$framesize = 40
$hwstack = 40
$swstack = 40
$baud = 4800
'---------- переменные и библиотеки ----------
$lib "glcd-Nokia1100.lib"
Dim A As Word
Dim S As Single
Dim Pstring As String * 8
Dim S_max_string As String * 8
Dim S_min_string As String * 8
Dim S_max1 As Eram Single
Dim S_min1 As Eram Single
Dim S_max As Single
Dim S_min As Single
S_max = 0
S_min = 0
Config Pinc.1 = 0 : Portc.1 = 1
S1 Alias Pinc.1
Config Portb.0 = Output
Portb.0 = 0
'---------- конфигурацияì LCD Nokia1110 ----------
Config Graphlcd = 128x64sed , Cs1 = Portc.2 , Si = Portc.4 , Sclk = Portc.5 , Rst = Portc.3
Const Negative_lcd = 0
Const Mirror_y = 0
Const Mirror_x = 1
Initlcd
Cls
' ******************** конфигурация HC-SR04***********************************************
Config Portd.7 = Input
Config Portd.6 = Output
Trigger Alias Portd.6
Trigger = 0
Const K = 0.1725
Config Debounce = 10
Config Timer1 = Timer , Prescale = 64
On Timer1 Замер
Enable Timer1
Enable Interrupts
'**************************************************************************************************
Начало:
Do
S_max = S_max1
S_min = S_min1
Debounce S1 , 0 , Установка
Disable Interrupts
If S > S_max Or S < S_min Then Portb.0 = 1 Else Portb.0 = 0
Enable Interrupts
Pstring = Fusing(s , "###.#")
S_max_string = Fusing(s_max , "###.#")
S_min_string = Fusing(s_min , "###.#")
Setfont Font6x8
Lcdat 1 , 20 , "измеритель"
Lcdat 2 , 20 , "расстояния"
Setfont Font12x16dig
Lcdat 4 , 0 , " " ; Pstring ; " "
Setfont Font6x8
Lcdat 7 , 1 , S_min_string ; " "
Lcdat 8 , 1 , S_max_string ; " "
Loop
End
Замер:
Trigger = 1
Waitus 15
Trigger = 0
Waitus 10
Pulsein A , Pind , 7 , 1
S = A * K
Return
Установка:
Disable Interrupts
Portb.0 = 0
Waitms 3000
Portb.0 = 1
Waitms 3000
Portb.0 = 0
Trigger = 1
Waitus 15
Trigger = 0
Waitus 10
Pulsein A , Pind , 7 , 1
S = A * K
S_max = S + 20
S_min = S - 20
S_max1 = S_max
S_min1 = S_min
Waitms 3000
Enable Interrupts
Goto Начало
$include "font6x8.font"
$include "font12x16dig.font"
Фото во вложении.
- Вложения
-
- IMG_3622.jpg
- (191.94 КБ) 341 скачивание
-
- IMG_3621.jpg
- (251.52 КБ) 432 скачивания
-
- IMG_3618.jpg
- (203 КБ) 302 скачивания
-
Slawakuzmich
- Открыл глаза
- Сообщения: 50
- Зарегистрирован: Чт мар 10, 2011 20:29:23
- Откуда: Челяб. обл, Троицкий район
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Немогу организовать шим на таймере1 в тине25. на таймере 0 работает, а когда в программе меняю таймер баском ругается
Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Down
Start Timer0
Do
Do
Waitms 10
Incr Pwm0b
Loop Until Pwm0b = 255
Do
Waitms 10
Decr Pwm0b
Loop Until Pwm0b = 0
Loop
End вот так всё работает
Config Timer1 = Pwm , Prescale = 8 , Compare B Pwm = Clear Down
Start Timer1
Do
Do
Waitms 10
Incr Pwm1b
Loop Until Pwm1b = 255
Do
Waitms 10
Decr Pwm1b
Loop Until Pwm1b = 0
Loop
End а вот так баском ругается на PWM1b . другие регистры пробовал(OCR1b) не ругается но не работает
Спойлер
Config Portb.1 = OutputConfig Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Down
Start Timer0
Do
Do
Waitms 10
Incr Pwm0b
Loop Until Pwm0b = 255
Do
Waitms 10
Decr Pwm0b
Loop Until Pwm0b = 0
Loop
End
Спойлер
Config Portb.3 = OutputConfig Timer1 = Pwm , Prescale = 8 , Compare B Pwm = Clear Down
Start Timer1
Do
Do
Waitms 10
Incr Pwm1b
Loop Until Pwm1b = 255
Do
Waitms 10
Decr Pwm1b
Loop Until Pwm1b = 0
Loop
End
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
Приветствую всех котов.Нужен совет. История такая. Есть у меня старый станок для намотки катушек, с мех. счетчиком. Делал я его лет 15 назад. А лет 10 назад добавил ему редуктор 4/1 - стало гораздо веселее. И вот решил я добавить старому другу электронные мозги в виде 4-разрядного счетчика на ATtiny 2313. За основу взял схему (см. приложение), только немного упростил её - убрал запись числа витков в память. Для удобства сделал небольшой имитатор из старого переменного резистора с прикрепленными оптопарами и диском со щелью. Принцип работы: когда щель проходит первую оптопару, срабатывает INT0, когда вторую - INT1. А очередность срабатываний дает направление счета. Вроде бы казалось, ничего сложного, НО: 1.-цифры индикатора заметно мерцают.
2.-нет никакой реакции на прохождение щели через оптопары.
Не могу понять, что я делаю не так.
Может, у кого найдется время посмотреть мой код?
$regfile = "2313def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Dim W As Word
Dim Count As Byte
Dim Number(4) As Byte
Dim R As Bit 'флаг правого вращения
Dim L As Bit 'флаг левого вращения
Config Portb = Output
Config Pind.0 = Input
Config Pind.2 = Input
Config Pind.3 = Input
Config Portd.1 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Int0 = Falling
Config Int1 = Falling
On Int0 Encod_r
On Int1 Encod_l
Config Timer0 = Timer , Prescale = 256
On Ovf0 Indic
Enable Interrupts
Enable Int0
Enable Int1
Enable Timer0
Start Timer0
Dig1 Alias Portd.1
Dig2 Alias Portd.4
Dig3 Alias Portd.5
Dig4 Alias Portd.6
Nul Alias Pind.0
W = 0 : R = 0 : L = 0 'начальные значения
Do
If Nul = 0 Then W = 0
If R = 1 And L = 0 Then
Incr W : If W > 9999 Then W = 0
End If
If L = 1 And R = 0 Then
Decr W : If W < 0 Then W = 9999
End If
R = 0 : L = 0
Loop
Encod_r: 'правое вращение
R = 1
Gifr = 64
Return
Encod_l: 'левое вращение
L = 1
Gifr = 128
Return
Indic:
Reset Dig1 : Reset Dig1 : Reset Dig3 : Reset Dig4
Number(1) = W / 1000
Number(2) = W Mod 1000
Number(2) = Number(2) / 100
Number(3) = W Mod 100
Number(3) = Number(3) / 10
Number(4) = W Mod 10
Incr Count : If Count > 4 Then Count = 1
Portb = Lookup(number(count) , Digits)
Select Case Count
Case 1 : If Number(1) <> 0 Then Set Dig1
Case 2 : If Number(2) <> 0 Then Set Dig2
Case 3 : If Number(3) <> 0 Then Set Dig3
Case 4 : Set Dig4
End Select
Return
End
Digits:
Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110
Data &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111
2.-нет никакой реакции на прохождение щели через оптопары.
Не могу понять, что я делаю не так.
Может, у кого найдется время посмотреть мой код?
$regfile = "2313def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Dim W As Word
Dim Count As Byte
Dim Number(4) As Byte
Dim R As Bit 'флаг правого вращения
Dim L As Bit 'флаг левого вращения
Config Portb = Output
Config Pind.0 = Input
Config Pind.2 = Input
Config Pind.3 = Input
Config Portd.1 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Int0 = Falling
Config Int1 = Falling
On Int0 Encod_r
On Int1 Encod_l
Config Timer0 = Timer , Prescale = 256
On Ovf0 Indic
Enable Interrupts
Enable Int0
Enable Int1
Enable Timer0
Start Timer0
Dig1 Alias Portd.1
Dig2 Alias Portd.4
Dig3 Alias Portd.5
Dig4 Alias Portd.6
Nul Alias Pind.0
W = 0 : R = 0 : L = 0 'начальные значения
Do
If Nul = 0 Then W = 0
If R = 1 And L = 0 Then
Incr W : If W > 9999 Then W = 0
End If
If L = 1 And R = 0 Then
Decr W : If W < 0 Then W = 9999
End If
R = 0 : L = 0
Loop
Encod_r: 'правое вращение
R = 1
Gifr = 64
Return
Encod_l: 'левое вращение
L = 1
Gifr = 128
Return
Indic:
Reset Dig1 : Reset Dig1 : Reset Dig3 : Reset Dig4
Number(1) = W / 1000
Number(2) = W Mod 1000
Number(2) = Number(2) / 100
Number(3) = W Mod 100
Number(3) = Number(3) / 10
Number(4) = W Mod 10
Incr Count : If Count > 4 Then Count = 1
Portb = Lookup(number(count) , Digits)
Select Case Count
Case 1 : If Number(1) <> 0 Then Set Dig1
Case 2 : If Number(2) <> 0 Then Set Dig2
Case 3 : If Number(3) <> 0 Then Set Dig3
Case 4 : Set Dig4
End Select
Return
End
Digits:
Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110
Data &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111
- Вложения
-
- Счетчик на Attiny2313.rar
- (99.13 КБ) 206 скачиваний
Re: BASCOM AVR в вопросах и ответах
Ну я бы увеличил частоту срабатывания таймера на индикацию. Хотя бы раза в 4. Что касается прохождения датчиков, то какая реакция ожидается? Или все это вообще не считает?
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
В том то и дело, что вообще не считает. Ни быстро, ни медленно. Ни вперед, ни назад. Индикатор проверял батарейкой - все сегменты светятся. Так что пока думаю.
А насчет динамической индикации - недавно сделал термометр на 2313 - работает нормально, без мерцаний, хотя параметры( частота и прескаллер) -точно такие же. Попробовать можно, но это не решает главной проблемы. Так что пока чешу репу дальше.
Надо будет попробовать другой индикатор, но завтра.
А насчет динамической индикации - недавно сделал термометр на 2313 - работает нормально, без мерцаний, хотя параметры( частота и прескаллер) -точно такие же. Попробовать можно, но это не решает главной проблемы. Так что пока чешу репу дальше.
Надо будет попробовать другой индикатор, но завтра.
Re: BASCOM AVR в вопросах и ответах
Для диагностики можно повесить по светодиоду на прерывания и зажигать если произошло событие. Возможно по входу не хватает уровня. Можно пойти совсем другим путем. На диске сделать не щель, а целый сегмент вырезать. Что бы оба датчика были освещены. А отслеживать срабатывание только одного. Тогда при вращении в одну сторону будут оба освещены, а в другую только один. Ну и во время срабатывания следить за вторым.
-
Slawakuzmich
- Открыл глаза
- Сообщения: 50
- Зарегистрирован: Чт мар 10, 2011 20:29:23
- Откуда: Челяб. обл, Троицкий район
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Помогите пожалуйста разобратся с аппаратным шимом на тини25. Шим на таймере0 - как выше писал без проблем. На таймере же 1 никакой реакции,максимум - получилось сделать сверхкороткие импульсы, без всякой скважности. Даташит уже запарился читать и переводить, всё равно ничего не понял. Средствами баскома таймер1 вообще не получилось запустить, только напрямую прописывая в регистры нужные биты.
$Crystal=4000000
$hwstack=40
$swstack=16
$framesize=32
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Tccr1 = &B01100101
Gtccr = &B01101100
Ocr1c = 150
End
При всех этих танцев, получается очень короткий импульс, как понял из даташита, когда счетчик насчитает в регистрах ocr1a, ocr1b число соответствующее Ocr1c, то он переключает соответствующий порт, но при этом сбрасывается на ноль и опять переключает порт в исходное состояние. Как заставить порт оставатся во включонном состоянии не пойму.
Вторая загвоздка состоит в том что немогу включить инвертирующие выходы шим. Мне в схеме нужно получить шим на выходе порта3, там находится инвертирующий выход OC1B, но я никак не могу получить на нем сигнал.
Спойлер
$regfile = "attiny25.dat"$Crystal=4000000
$hwstack=40
$swstack=16
$framesize=32
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Tccr1 = &B01100101
Gtccr = &B01101100
Ocr1c = 150
End
При всех этих танцев, получается очень короткий импульс, как понял из даташита, когда счетчик насчитает в регистрах ocr1a, ocr1b число соответствующее Ocr1c, то он переключает соответствующий порт, но при этом сбрасывается на ноль и опять переключает порт в исходное состояние. Как заставить порт оставатся во включонном состоянии не пойму.
Вторая загвоздка состоит в том что немогу включить инвертирующие выходы шим. Мне в схеме нужно получить шим на выходе порта3, там находится инвертирующий выход OC1B, но я никак не могу получить на нем сигнал.
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
Насчет светодиодов - идея интересная. Попробую завтра. И щель попробую сделать пошире.
-
Slawakuzmich
- Открыл глаза
- Сообщения: 50
- Зарегистрирован: Чт мар 10, 2011 20:29:23
- Откуда: Челяб. обл, Троицкий район
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
очень странная система...
баском ругался на запись в регистры чисел...
однакож псле кода
Gtccr = &B01101100
Ocr1c =150
добавив строку
Gtccr = &B01101100
Ocr1c = 150
OCR1B=100
на выходе OC1B появилась скважность.. то есть теперь шимом можно управлять? осталось решит задачу с выводом шим на инвертированный выход OC!B
баском ругался на запись в регистры чисел...
однакож псле кода
Спойлер
Tccr1 = &B01100101Gtccr = &B01101100
Ocr1c =150
добавив строку
Спойлер
Tccr1 = &B01100101Gtccr = &B01101100
Ocr1c = 150
OCR1B=100
на выходе OC1B появилась скважность.. то есть теперь шимом можно управлять? осталось решит задачу с выводом шим на инвертированный выход OC!B
-
Slawakuzmich
- Открыл глаза
- Сообщения: 50
- Зарегистрирован: Чт мар 10, 2011 20:29:23
- Откуда: Челяб. обл, Троицкий район
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
МурррраАА!!!наконец то!
найдя скважность в таймере1 атттини25(код выше)
Gtccr = &B01101100
Ocr1c = 150
OCR1B=100
поменяв в строчке GTCCR регистр
Ocr1c = 255
Ocr1b = 100
на инвертируемом выводе OC1B появился ШИМ! 2суток за копьютером не прошли даром....
найдя скважность в таймере1 атттини25(код выше)
Спойлер
Tccr1 = &B01100101Gtccr = &B01101100
Ocr1c = 150
OCR1B=100
поменяв в строчке GTCCR регистр
Спойлер
Gtccr = &B01011100Ocr1c = 255
Ocr1b = 100
на инвертируемом выводе OC1B появился ШИМ! 2суток за копьютером не прошли даром....
Re: BASCOM AVR в вопросах и ответах
To rojnov
Этот код и эта схема несовместимы. Разберись с конфигурацией пинов. Бардак полный. С выходов читаем, на входы выводим. Компаратор в проге не при делах. Причеши свою прогу и схему.Потом выкладывай со СВОЕЙ схемой, а не левой.
Этот код и эта схема несовместимы. Разберись с конфигурацией пинов. Бардак полный. С выходов читаем, на входы выводим. Компаратор в проге не при делах. Причеши свою прогу и схему.Потом выкладывай со СВОЕЙ схемой, а не левой.
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
По поводу счетчика витков. Схема в моем первом сообщении прилагалась в качестве источника идеи, и не более, о чем я, кажется, там же и указал. Поэтому чтобы не было непоняток, прикладываю свою схему, для которой я и писал свой код. Проанализировав работу оптопар в своей схеме, решил упростить себе жизнь, и оптопары заменил на герконы. В итоге проблему это не решило. Счетчик работает нестабильно, то через раз, то вообще сбрасывает число витков на ноль. Пробовал даже отключить второй геркон - не помогло. Может быть, виноват дребезг контактов? Я не знаю, как с этим обстоят дела у герконов. Так что вопрос пока остается открытым по поводу кода - что я делаю неправильно? Раз нет курсов, приходится учиться на советах доброжелательных форумчан.
- Вложения
-
- Схема+код.rar
- (73.55 КБ) 166 скачиваний
Re: BASCOM AVR в вопросах и ответах
Я чегой-то припарился, полстраницы пальцы в кровь пальцевую, свою, родную, артериальную стирать об клаву, а потом нихрена не отправляется, ещё раз вход требуется (был же войдён).
To Rojnov.
Сейчас почти правильно (схема и код).
Косяки:
1. Убрать прерывание от таймера (он ПОКА!!!!! нах не нужен)
Indic: - Сделать из него Gosub в основном цикле. Там основные коряги.
2. Флаги внешних прерываний в обработчиках сбрасывать надо, а не устанавливать, иначе там и останешься навечно.
3. ВременнОе перекрытие оптопар, герконов, тайминги (тут вот жестко думать надо, от механики зависит). Тут может (должен) таймер пригодиться.
Блин, флеху с твоей почти обработанной мною темой на каторге забыл, погоди до понедельника. Пиши в ЛС, проще будет.
To Rojnov.
Сейчас почти правильно (схема и код).
Косяки:
1. Убрать прерывание от таймера (он ПОКА!!!!! нах не нужен)
Indic: - Сделать из него Gosub в основном цикле. Там основные коряги.
2. Флаги внешних прерываний в обработчиках сбрасывать надо, а не устанавливать, иначе там и останешься навечно.
3. ВременнОе перекрытие оптопар, герконов, тайминги (тут вот жестко думать надо, от механики зависит). Тут может (должен) таймер пригодиться.
Блин, флеху с твоей почти обработанной мною темой на каторге забыл, погоди до понедельника. Пиши в ЛС, проще будет.
-
aleksandr-zh
- Сверлит текстолит когтями
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
Re: BASCOM AVR в вопросах и ответах
Добрый день
хочу реализовать приём и передачу девятого бита. Как инициализировать регистры для работы uart в режиме 9 бит я понял:
Код:
но как вычитывать девятый бит без использоваия ассемблера?
может кто работал и есть опыт?
хочу реализовать приём и передачу девятого бита. Как инициализировать регистры для работы uart в режиме 9 бит я понял:
Код:
Код: Выделить всё
$regfile = "m8adef.dat" '
$crystal = 4000000
Config Com1 = 9600 , Parity = None , Stopbits = 1 , Databits = 9но как вычитывать девятый бит без использоваия ассемблера?
может кто работал и есть опыт?