Страница 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
и т.д.
:tea:

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
:) Я тоже написал, но раз не надо, выкладывать не буду. :beer:

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
:) А про АЦП читал? Или всё методом тыка?

Так нужен мой вариант на АВ или ну его? :))
Могу просто прошивку кинуть для попробовать, вот такая схема:
olegue.png
(27.7 КБ) 122 скачивания