Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Getrc и attiny24

Сообщений 1 страница 17 из 17

1

Здравствуйте, товарищи!

Есть код:

Код:
$regfile = "attiny24.dat"
$crystal = 8000000

Cls
Dim W As Word

Do
   W = Getrc(porta , 7)
   Locate 1 , 1
   Lcd W ; "     "
Loop

Радостный собрал все на макетке думал щас запущу и волшебство будет!!! Да не тут то было! На LCD кажет 0. Смоделировал это дело в протеусе.. - Тоже самое.. Почему не работает Getrc? Прикол в том что на PA7 всегда низкий уровень и никаких импульсов..
Подскажите решение.
Спасибо!
Схема:
http://cs323828.vk.me/v323828390/71f6/TFTAP-PW_wM.jpg

Отредактировано dimaib (2013-08-10 02:52:32)

0

2

Вы пытаетесь прочитать значение записанное в порт, а там 0.
Это и получаете. В данном случае надо указывать (pina , 7).

0

3

Спасибо большое.. Глупая ошибка.
Можно ли как то с помощью этой функции мерить время заряда емкости начиная хотя бы от 100pF - повышение резистора результатов не дало.
И еще вопрос - возвращаемое значение в микросекундах или милисекндах? - этой информации нигде не нашел...

0

4

Эта функция подходит для определения положения движка резистора.
Для определения ёмкости конденсатора нужно подключить вход компаратора
к точке соединения RC, на второй вход подать напряжение до которого
нужно разрядить конденсатор. Затем заряжаете конденсатор, подавая
1 на porta , 7. Затем подаёте 0 и запускаете таймер, у компаратора перед
этим должно быть включено прерывание, или просто отслеживаете флаг.
Как только он сработает останавливаете таймер и читаете его показания.
Дальше чистая математика.
У Atmel это описано в апноуте.

0

5

здравствуйте.. не понимаю почему таймер не хочет считать.. все время выдается одно и тоже значение. Или дело не в таймере?

Код:
$regfile = "attiny24.dat"
$crystal = 8000000

Config Porta.3 = Output
Config Portb.2 = Output

Config Timer0 = Timer , Prescale = 1
Stop Timer0
Dim N As Integer


Acsr.6 = 1            
Acsr.7 = 0
Acsr.0 = 0
Acsr.1 = 1

Enable Aci
On Aci Analogkomp
Enable Timer0
On Timer0 Int_tm0
Enable Interrupts

N = 0
Do
      Set Portb.2
      Waitms 100
      Reset Portb.2
      Start Timer0
      Waitms 300
Loop

Analogkomp:
   Porta.3 = Not Porta.3
   N = N * 255
   N = N + Timer0
   Stop Timer0
   Cls
   Locate 1 , 1
   Lcd N
   N = 0
   Waitms 1
Return

Int_tm0:
   N = N + 1
Return

http://cs320229.vk.me/v320229390/1f83/uqBglTFFLGg.jpg

0

6

Waitms по идее задействует таймер 0. Попробуй с другим.

0

7

Вы оказались правы! Timer1 без проблем заработал.
Вот окончательный вариант.. Может пригодится кому то.
И есть еще один вопрос.. Это хотел использовать как емкостной уровнемер. То есть имеется какаето металлическая емкость (скажем бочка) и по оси внутри емкости проходит медный изолированный кабель.(получилось две обкладки конденсатора). С этим всем данная схема работает. Но если докоснуться до бочки рукой - то емкость резко возрастает. Как с этим бороться? И поможет ли заземление?

Код:
$regfile = "attiny24.dat"
$crystal = 8000000
Cursor Off
Config Timer1 = Timer , Prescale = 1
Stop Timer1

Config Portb.2 = Output
Zar Alias Portb.2
Reset Zar

'Настройка аналогового компаратора(АК)
Acsr.7 = 1                                                  '0-вкл... 1-выкл АК
Acsr.6 = 1                                                  'опорное напряжение на AIN0 - 1.22В
Acsr.1 = 0                                                  'режим работы АК
Acsr.0 = 0                                                  'режим работы АК

'Настройка прерываний
On Timer1 Int_tm1
Enable Timer1
Enable Aci
On Aci An_komp
Enable Interrupts

Dim N As Word

Do
   Set Zar : Waitms 200
   Start Timer1
   Acsr.7 = 0
   Reset Zar : Waitms 200
Loop

'Обработка прерываний
Int_tm1:                                                    'Timer1
   Incr N
Return

An_komp:                                                    'Компаратор
   Stop Timer1
   N = N * &HFFFF : N = N + Timer1
   If N <> 0 Then
      Locate 1 , 1
      Lcd N ; "    "
   end if
   Timer1 = 0 : Acsr.7 = 1 : N = 0
Return

http://cs320229.vk.me/v320229390/1fb3/qzM9RaCuNgU.jpg

0

8

А корпус бочки при этом подключен к общему проводу устройства ? Это могут быть наводки, если нет

0

9

еще ничего не подключено.. все только в эксперименте находится.. Тоесть корпус подключаем к общему.. Как еще все это защитить от скачков емкости?

0

10

А как  ты вообще собирался мерить емкость одним проводом ? ))) Вот, прикасаясь к бочке и создавал доп. емкость.
Кстати, для датчика тоже не всякая изоляция годится- некоторые напитываются водой и начинают проводить.

0

11

Всмысле? Вы хотите сказать что сейчас подход неправильный? Окончательный вариант не подходит?
Мы измеряем уровень диэлектрика.

0

12

Именно не правильный. К примеру, для жёсткой воды, набираемой с колодца, ёмкость со временем будет меняться, т.к. электрод обрастёт солями, что внесёт погрешность.

+1

13

ну скажем существует такое понятие как ППР.. оборудование тоже требует ухода и чистки - и от этого никто не отказывается. Так же маленькая погрешность допустима - тк речь идет о автоматическом доливе жидкости в емкость и простейший мониторинг за  расходом жидкости.. Думаю покрешность 10-15% приемлема.
Еще какие то проблемы возникнуть могут?

0

14

dimaib написал(а):

Всмысле? Вы хотите сказать что сейчас подход неправильный? Окончательный вариант не подходит?
Мы измеряем уровень диэлектрика.

C диэлектриком все много хуже, то, что производители емкостных топливомеров бодренько рапортуют о 5% точности -полнейший бред, т.к. например для бензина диэлектрическая проницаемость сильно колеблется от кол-ва растворенной воды, и точность может достигать 60%.  А вот в воде такого, от даже довольно сильного колебания концентрации, я не замечал, скорее всего связано с тем, что в роли диэлектрика- уже только оплетка, она довольно стабильна, окруженная проводником,сопротивление которого в данном случае некритично.

Отредактировано Skull (2013-08-16 23:48:03)

0

15

Да.. это конечно все огорчает и ломает всю картину.. Но если разбирать данный случай:
Имеются две емкости с разными компонентами - назовем их компонент 1 и 2.. Компонент 1 как обещает производитель полностью диэлектрик.. Компонент 2 в чистом виде тоже диэлектрик, но содержит примесь 2% воды.. Названия 1 и 2 сказать не могу - так как не технолог и с химией у меня проблемы всегда=)..
Вообщем.. Не знаю зачем это все понаписал - но дело в этом=)

0

16

Ну, я имел кучку приколов с бензином и мукой.
С мукой все проще- измеряем параллельно влажность, а дальше уровень по таблице.
Бензин так и не одолел, т.к не придумал чем мерить диэлектрическую постоянную. Впрочем, позже пришла мысля мерить еще одну калибровочную емкость , известного размера пластин, и гарантированно погруженную в бензин, но уже не было нужно.

0

17

Для измерения емкости муки,в частности я видел такую схему : сдвоенный таймер(556) в режиме генерации,одна половина таймера генерирует некую стабильную частоту(образцовая),вторая схемно идентична первой половине- генерирует частоту исходя из емкости обкладок электродов, а на выходе стоит 2313 тинька и считает, как я понимаю "нулевые биения" , с возможностью инвертировать сигнал или скорректировать "нуль". Довольно работоспособная схема.

0