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

Сообщение VNS »

Что хочется получить? Вольтметр с индикацией на четырёх разрядный семисегментный дисплей?
Если дисплей под динамическую индикацию, то понадобится 2 регистра сдвига (595_е), а если под статический вариант, то регистров необходимо будет 4. Какой вариант? И какие индикаторы, с ОА или ОК?
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2510
Зарегистрирован: Чт ноя 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
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1636
Зарегистрирован: Пт дек 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 В засветится только сегмент А (Выход за максимум).
Так устроит?
Поставщик валерьянки для Кота
Сообщения: 1972
Зарегистрирован: Сб май 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 КБ) 145 скачиваний
prot.jpg
(177.04 КБ) 105 скачиваний
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2510
Зарегистрирован: Чт ноя 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

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

Сообщение VNS »

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

Сообщение VNS »

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

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

Сообщение olegue »

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

Сообщение VNS »

Это же специфическое устройство, такое не понадобится не кому кроме как тебе. Так что не вижу смысла… если кто-то заинтересуется, то напишет. Я ведь не профессионал, чтобы брать с меня пример. Просто могу написать рабочий вариант, а как он будет выглядеть с профессиональной точки зрения, то такое. :)
Вот прошивка по ранее показанной схеме. Тактируется МК на частоте 9,6 МГц.
ADC_ATtiny13.hex
(1.22 КБ) 107 скачиваний
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

595-й регистр — это тема! Я на нём и на тиньке-13 сваял счётчик витков с реверсом, сбросом и установкой с помощью четырёх кнопок. Там тоже вся система ввода-вывода — 4 кнопки управления, и 4 индикатора (включенных по матричной схеме для динамической индикации) — всего по 3-м проводам к МК подключалась. Единственный минус заключается в том, что ток через светодиоды ограничивается максимально допустимым током через вывод питания регистра (если ограничится только транзисторами для усиления тока на общий вывод индикатора).
Ответить

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