индикатор уровня постоянного напряжения на Attiny13 (bascom)

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

индикатор уровня постоянного напряжения на Attiny13 (bascom)

Сообщение 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
Реклама
roman.com
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение roman.com »

Зачем bascom (язык высокого уровня Basic) ?
Его нико не знает)) Устарел...
Это надо сидеть разбираться... в этих каракулях))

Пишите как все нормальные люди на Си (самый популярный язык на сегодняшний день).
CodeVisionAVR и AVR Studio (две самые популярные среды разработки программ для микроконтроллеров семейства Atmel AVR).
А для всяких извращенцев (вроде меня :))) ) есть ещё ассе́мблер))

Урок 49. Работа с АЦП... Подключение чего угодно к чему угодно))
https://www.radiokot.ru/forum/viewtopic ... 8&t=148087
и т.д.
:tea:
Реклама
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение olegue »

фигова, я хотел ограничиться готовым кодом. В нем кстати, не так уж все и плохо и непонятно.
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1627
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение VNS »

Могу написать пример на АВ (Algorithm Builder https://cxem.net/mc/mc290.php) если есть желание поизучать данную среду программирования. Она намного проще. Правда есть ограничения, связанные с не поддержкой новых МК. :)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение olegue »

https://www.youtube.com/watch?v=bdeQ-nlYCFg

VNS, да тут смотрел подброный вариант вольтметра. Только если Вам не лень, я бы быстро включился в тему если бы пример был
Реклама
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1627
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение VNS »

Что хочется получить? Вольтметр с индикацией на четырёх разрядный семисегментный дисплей?
Если дисплей под динамическую индикацию, то понадобится 2 регистра сдвига (595_е), а если под статический вариант, то регистров необходимо будет 4. Какой вариант? И какие индикаторы, с ОА или ОК?
Реклама
Аватара пользователя
Adagumer
Поставщик валерьянки для Кота
Сообщения: 2301
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение Adagumer »

roman.com писал(а):Зачем bascom ?

Это надо сидеть разбираться... в этих каракулях)
Пишите как все нормальные люди на Си
После каракулей на Си баском читается как детская книжка!
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение 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)
индикаторы с общим плюсом (анодом)
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1627
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение 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 В засветится только сегмент А (Выход за максимум).
Так устроит?
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение 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
Вложения
1.zip
(26.81 КБ) 133 скачивания
prot.jpg
(177.04 КБ) 94 скачивания
Аватара пользователя
Adagumer
Поставщик валерьянки для Кота
Сообщения: 2301
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение Adagumer »

olegue писал(а):но никто не может мне помочь
Вам бы сюда, здесь более специализированный портал!
http://bascomavr.3bb.ru/
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение olegue »

veso74, Adagumer, VNS, вы будете смеяться, но я все решил

проблема была в этой строке

Reference = Internal

а надо

Reference = Avcc

Теперь все отлично!
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение Martian »

хммм... так может точность быть хуже.
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение 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 вообще не работает.
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1627
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение VNS »

:) Я тоже написал, но раз не надо, выкладывать не буду. :beer:
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение Martian »

просто internal = 1.1 В опорное напряжение. Я думал, побольше... да, вариант с Avcc тут лучше
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1627
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение VNS »

[uquote="olegue",url="/forum/viewtopic.php?p=4216588#p4216588"]Поэтому надо теперь придуать делитель[/uquote]
Зачем делитель? Измеряемое напряжение больше 5 В? Тогда да, делитель нужен. А какое входное напряжение?
нужна помощь как пересчитать ооцифрованные значения в Вольты
В даташите есть формула перевода значений АЦП в напряжение.
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение 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в?
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение Martian »

ну, упрощённо говоря, если AЦП 10 бит, то это 1024 значений.
Если опорное Avcc, то есть равно питанию, а питание 5 вольт, то 5/1024 = 4.88 мВ. То есть, 1 значения АЦП - 4.88 милливольт. если 1.27 разделить на 0.00488, то получается 260.

отсюда видно, что показания, помимо погрешностей преобразования, зависят от опорного напряжения. если питание просадится до 4.9 В, то AЦП при измерении 1.27 покажет уже 265
Последний раз редактировалось Martian Вс апр 17, 2022 15:34:46, всего редактировалось 1 раз.
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1627
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: индикатор уровня постоянного напряжения на Attiny13 (bas

Сообщение VNS »

:) А про АЦП читал? Или всё методом тыка?

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

Вернуться в «AVR»