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

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

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

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

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

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

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

Сообщение olegue »

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

Сообщение VNS »

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

Сообщение olegue »

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

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

Сообщение VNS »

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

Сообщение Adagumer »

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

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

Сообщение 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
Откуда: Тюмень

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

Сообщение 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 скачивания
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2301
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

Сообщение Adagumer »

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

Сообщение olegue »

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

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

Reference = Internal

а надо

Reference = Avcc

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

Сообщение Martian »

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

Сообщение 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
Откуда: Тюмень

Сообщение VNS »

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

Сообщение Martian »

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

Сообщение VNS »

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

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

Сообщение 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
Откуда: Тюмень

Сообщение VNS »

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

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

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