Страница 1 из 2
индикатор уровня постоянного напряжения на Attiny13 (bascom)
Добавлено: Сб апр 16, 2022 16:57:56
olegue
Урок 20. Подключение семисегментного индикатора по трём проводам (74HC595)
https://cxem.net/mc/mc235.php
Урок 9. Работа с АЦП на примере ATtiny13 в BASCOM-AVR
https://cxem.net/mc/mc128.php
изучив эти уроки решиль объединить их в один проект и сделать индикатор уровня
т.е 9 градаций заданного напряжения.
поставил Bascom avr, Написал программу (скорее объединил код с двух уроков)
Но что-то у меня не выходит ни черта. Хочу попросить знатоков посмотреть код на наличие
грубых логических ошибок. Код комплируется отлично но толком не работает.
Код: Выделить всё
$regfile = "attiny13.dat"
$crystal = 9600000
$HWSTACK=40
$SWSTACK=8
$FRAMESIZE =8
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Ds Alias Portb.2
Sh_cp Alias Portb.0
Const St_cp = 1
Dim Level As Integer
Start Adc
Do
If Getadc(2) >= 100 and Getadc(2) < 200 Then
R1 = Lookup(1 , Numbers)
End If
If Getadc(2) >= 200 and Getadc(2) < 300 Then
R1 = Lookup(2 , Numbers)
End If
If Getadc(2) >= 300 and Getadc(2) < 400 Then
R1 = Lookup(3 , Numbers)
End If
If Getadc(2) >= 400 and Getadc(2) < 500 Then
R1 = Lookup(4 , Numbers)
End If
If Getadc(2) >= 600 and Getadc(2) < 700 Then
R1 = Lookup(5 , Numbers)
End If
If Getadc(2) >= 800 and Getadc(2) < 900 Then
R1 = Lookup(6 , Numbers)
End If
If Getadc(2) >= 900 and Getadc(2) <1000 Then
R1 = Lookup(7 , Numbers)
End If
If Getadc(2) >= 1000 Then
R1 = Lookup(8 , Numbers)
End If
Shiftout Ds , Sh_cp , R1 , 1
Pulseout Portb , St_cp , 5
Loop
End
Numbers:
Data &B10000001 '0
Data &B11110011 '1
Data &B01001001 '2
Data &B01100001 '3
Data &B00110011 '4
Data &B00100101 '5
Data &B00000101 '6
Data &B10110001 '7
Data &B00000001 '8
Data &B00100001 '9
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Сб апр 16, 2022 17:23:09
roman.com
Зачем bascom (язык высокого уровня Basic) ?
Его нико не знает)) Устарел...
Это надо сидеть разбираться... в этих каракулях))
Пишите как все нормальные люди на Си (самый популярный язык на сегодняшний день).
CodeVisionAVR и AVR Studio (две самые популярные среды разработки программ для микроконтроллеров семейства Atmel AVR).
А для всяких извращенцев (вроде меня

) есть ещё ассе́мблер))
Урок 49. Работа с АЦП... Подключение чего угодно к чему угодно))
https://www.radiokot.ru/forum/viewtopic ... 8&t=148087
и т.д.

Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Сб апр 16, 2022 19:01:31
olegue
фигова, я хотел ограничиться готовым кодом. В нем кстати, не так уж все и плохо и непонятно.
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Сб апр 16, 2022 20:56:43
VNS
Могу написать пример на АВ (Algorithm Builder
https://cxem.net/mc/mc290.php) если есть желание поизучать данную среду программирования. Она намного проще. Правда есть ограничения, связанные с не поддержкой новых МК.

Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Сб апр 16, 2022 22:17:59
olegue
https://www.youtube.com/watch?v=bdeQ-nlYCFg
VNS, да тут смотрел подброный вариант вольтметра. Только если Вам не лень, я бы быстро включился в тему если бы пример был
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 01:35:32
VNS
Что хочется получить? Вольтметр с индикацией на четырёх разрядный семисегментный дисплей?
Если дисплей под динамическую индикацию, то понадобится 2 регистра сдвига (595_е), а если под статический вариант, то регистров необходимо будет 4. Какой вариант? И какие индикаторы, с ОА или ОК?
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 09:29:47
Adagumer
roman.com писал(а):Зачем bascom ?
Это надо сидеть разбираться... в этих каракулях)
Пишите как все нормальные люди на Си
После каракулей на Си баском читается как детская книжка!
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 10:08:37
olegue
таки да, но никто не может мне помочь с этой детской книжкой. Где то я туплю , а где не понимаю
Добавлено after 10 minutes 18 seconds:
Re: индикатор уровня постоянного напряжения на Attiny13 (bascom)
VNS, вольтметр для диапазона 0.5-2.0 вольта , на одном 7seg .
например
1- 0.6в
2- 0.7в
.....
9- 1.9в
Добавлено after 46 seconds:
Re: индикатор уровня постоянного напряжения на Attiny13 (bascom)
индикаторы с общим плюсом (анодом)
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 11:20:32
VNS
[uquote="olegue",url="/forum/viewtopic.php?p=4216428#p4216428"]
VNS, вольтметр для диапазона 0.5-2.0 вольта , на одном 7seg .[/uquote]
Понял. Только одно уточнение… если придерживаться данному значению:
например
1- 0.6в
2- 0.7в
.....
9- 1.9в
то цифре девять будет соответствовать напряжение 1,4 В, а не 1,9 В. Сделаю так:
1 = 0,21 В…0.40 В
2 = 0,41 В…0,60 В
…
9 = 1,81 В…2,00 В
При напряжении более 2 В засветится только сегмент А (Выход за максимум).
Так устроит?
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 11:38:26
veso74
olegue, попробуйте. На симуляторе работает.
(Должен признаться, это моя первая программа bascom. Очень вероятно, что вторая не будет

.
У него все ужасно и недружелюбно: от интерфейса до операторов. Личное первоначальное мнение конечно).
Код: Выделить всё
$regfile = "attiny13.dat"
$crystal = 9600000
$HWSTACK=40
$SWSTACK=8
$FRAMESIZE =8
Config Adc = Single, Prescaler = Auto, Reference = Internal
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Ds Alias Portb.2
Sh_cp Alias Portb.0
Const St_cp = 1
Dim Level As Integer
Dim Volts As Integer
Start Adc
Do
Volts = Getadc(2)
If Volts >= 100 and Volts < 200 Then
Level = 1
End If
If Volts >= 200 and Volts < 300 Then
Level = 2
End If
If Volts >= 300 and Volts < 400 Then
Level = 3
End If
If Volts >= 400 and Volts < 500 Then
Level = 4
End If
If Volts >= 600 and Volts < 700 Then
Level = 5
End If
If Volts >= 800 and Volts < 900 Then
Level = 6
End If
If Volts >= 900 and Volts < 1000 Then
Level = 7
End If
If Volts >= 1000 Then
Level = 8
End If
R1 = Lookup(level, Numbers)
Shiftout Ds , Sh_cp, R1, 1
Pulseout Portb, St_cp, 5
Loop
End
Numbers:
Data &B10000001 '0
Data &B11110011 '1
Data &B01001001 '2
Data &B01100001 '3
Data &B00110011 '4
Data &B00100101 '5
Data &B00000101 '6
Data &B10110001 '7
Data &B00000001 '8
Data &B00100001 '9
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 13:32:13
Adagumer
olegue писал(а):но никто не может мне помочь
Вам бы сюда, здесь более специализированный портал!
http://bascomavr.3bb.ru/
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 14:03:29
olegue
veso74, Adagumer, VNS, вы будете смеяться, но я все решил
проблема была в этой строке
Reference = Internal
а надо
Reference = Avcc
Теперь все отлично!
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 14:06:13
Martian
хммм... так может точность быть хуже.
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 14:08:10
olegue
[uquote="VNS",url="/forum/viewtopic.php?p=4216488#p4216488"][uquote="olegue",url="/forum/viewtopic.php?p=4216428#p4216428"]
VNS, вольтметр для диапазона 0.5-2.0 вольта , на одном 7seg .[/uquote]
Понял. Только одно уточнение… если придерживаться данному значению:
например
1- 0.6в
2- 0.7в
.....
9- 1.9в
то цифре девять будет соответствовать напряжение 1,4 В, а не 1,9 В. Сделаю так:
1 = 0,21 В…0.40 В
2 = 0,41 В…0,60 В
…
9 = 1,81 В…2,00 В
При напряжении более 2 В засветится только сегмент А (Выход за максимум).
Так устроит?[/uquote]
Конечно, устроит. Но я и сам тут не сижу без дела. Поэтому надо теперь придуать делитель и нужна помощь как пересчитать ооцифрованные значения в Вольты
Добавлено after 1 minute:
Re: индикатор уровня постоянного напряжения на Attiny13 (bascom)
Martian, internal вообще не работает.
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 14:08:19
VNS

Я тоже написал, но раз не надо, выкладывать не буду.

Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 14:11:51
Martian
просто internal = 1.1 В опорное напряжение. Я думал, побольше... да, вариант с Avcc тут лучше
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 14:29:06
VNS
[uquote="olegue",url="/forum/viewtopic.php?p=4216588#p4216588"]Поэтому надо теперь придуать делитель[/uquote]
Зачем делитель? Измеряемое напряжение больше 5 В? Тогда да, делитель нужен. А какое входное напряжение?
нужна помощь как пересчитать ооцифрованные значения в Вольты
В даташите есть формула перевода значений АЦП в напряжение.
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 15:15:21
olegue
чет , я опять поплыл
если вход открытый, то на входе adc (на 3й ноге) напряжение питания около чуть меньше 5 вольт. И индикатор показывает то что соответсвует максимальному значению adc
ну да ладно
я методом тыка установил, что при 1.27в у меня adc от 250 до 300
Добавлено after 8 minutes 11 seconds:
Re: индикатор уровня постоянного напряжения на Attiny13 (bascom)
1.27 в -это между 250 и 260, можно принять 255 , а как дальше считать?
сколько принимать напряжение Avcc?
Добавлено after 36 seconds:
Re: индикатор уровня постоянного напряжения на Attiny13 (bascom)
5в?
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 15:32:05
Martian
ну, упрощённо говоря, если AЦП 10 бит, то это 1024 значений.
Если опорное Avcc, то есть равно питанию, а питание 5 вольт, то 5/1024 = 4.88 мВ. То есть, 1 значения АЦП - 4.88 милливольт. если 1.27 разделить на 0.00488, то получается 260.
отсюда видно, что показания, помимо погрешностей преобразования, зависят от опорного напряжения. если питание просадится до 4.9 В, то AЦП при измерении 1.27 покажет уже 265
Re: индикатор уровня постоянного напряжения на Attiny13 (bas
Добавлено: Вс апр 17, 2022 15:33:59
VNS

А про АЦП читал? Или всё методом тыка?
Так нужен мой вариант на АВ или ну его?
Могу просто прошивку кинуть для попробовать, вот такая схема: