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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Почему ADC убивает Atmega8?


Почему ADC убивает Atmega8?

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

1

Суть проблемы такова.
Конструкция состоит из двух частей: первая на Atmega8 меряет напряжение и через 433 МГц передатчик отправляет данные на приёмник. Оттуда вторая часть на такой же Atmega8 берёт данные и выводит на экран 1602.
Так вот, в передатчике умирает уже второй чип. Он перестаёт работать и определяться программатором. Не сразу, сначала всё хорошо, а поработав полчаса-час.
Почему я решил, что дело в ADC? Ну, во-первых, приёмник на точно таком же контроллере работает, разница только в использовании АЦП. Во-вторых, я делал маленький пробник-осциллограф тоже с использованием внутреннего АЦП, ставил туда и Atmega8 и Atmega88 - результат один: он работает от нескольких минут до получаса и умирает на несколько часов, бывает на сутки. Через несколько часов опять работает как ни в чём не бывало.
Получается я ошибся или в схеме, или в программе, или везде.
Схема:
http://s7.uploads.ru/t/OG81j.png
(На картинке есть очепятка)

Код:

Код:
$regfile = "m8adef.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
$baud = 600

Config 1wire = Portd.2
Config Timer1 = Timer , Prescale = 1024
On Timer1 Mytimer
Enable Timer1
Enable Interrupts
Config Adc = Single , Prescaler = Auto , Reference = Avcc   'АЦП

Dim Get_temp As Bit
Dim A As Integer
Dim U As Word
Dim Sum As Byte
Dim T_ As String * 3
Dim U_ As String * 3
Dim Sum_ As String * 3

Get_temp = 1
Do
  If Get_temp = 1 Then                                                     'Обновляет температуру и напряжение каждые 17 сек
    1wreset
    If Err = 1 Then
      Cls
      Lcd Err
    End If
    1wwrite &HCC
    1wwrite &H44
    Waitms 750
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    A = 1wread(2)
    A = A * 10
    A = A / 16
    Start Adc
    U = Getadc(0)
    Stop Adc
    If U > 999 Then U = 999
    Sum = A + U
    Get_temp = 0
    T_ = Str(a)
    T_ = Format(t_ , "000")
    U_ = Str(u)
    U_ = Format(u_ , "000")
    Sum_ = Str(sum)
    Sum_ = Format(sum_ , "000")
  End If
  Print "tx" ; T_ ; U_ ; Sum_
  Waitms 100
Loop

Mytimer:                                                                                  'каждые 17 сек
  Get_temp = 1
Return

Прошу помощи, что я делаю не так?

0

2

выложите схему и несколько фото устройства

0

3

А защиту входа на канал АЦП поставили? Например стабилитрон катодом в точку соединения R2|R3 и анодом на землю.
И какое напряжение на входе, если делитель 1 к 15?

0

4

2 Александр Д.
Схема выше, рисунок печатки:
http://s7.uploads.ru/t/tPQUc.png
Фото:
http://s2.uploads.ru/t/eX8CB.jpg

2 Mrshilov
В первом варианте Start Adc был до цикла Do/Loop, когда чип сгорел - решил что дело в этом и вставил Start/Stop в цикл. Времени на запуск ADC вроде как хватает, ведь в начале передатчик работает на ура.

2 Civil
Защита вроде как ни к чему, там меряет автомобильный аккумулятор в кладовке, он даже в конце заряда не превышает 15 В, на вход атмеги подаётся 1/16, т.е. 0,94 В. Делитель считал для внутреннего опорника 1 В.

0

5

один я не вижу картинок?...

ps
да, только я. Зашел в Firefox - отображается

так. Из опыта вспомнилось: у меня тоже умирали мега8 при близко расположенном передатчике 433мгц
как решил - не помню. Вроде было что-то с согласованием антенны передатчика. Может КСВ как-то убивал - не помню!

Отредактировано Александр Д. (2015-08-04 21:13:21)

0

6

да, для авто - нельзя напрямую цеплять МК в бортовую сеть/акк
вот почитайте: http://techno-mind.ru/avto/pitanie-chuv … bilya.html

+1

7

2 Александр Д.
Т.е. отнести передатчик подальше от МК, на метр например? Я ещё передатчик запитал от 15 В (китайцы обещают, что он работает до 18 В), а то при 5 В дальность маловата была.

2 RDW
Почитал, спасибо. По-моему, там перегибают. А моя конструкция к бортовой сети отношения не имеет, она подключается к аккумулятору, который стоит на даче в кладовке и питает инвертор. Во время испытаний подключал к ЗУ, которое выдаёт 15 В. В этом режиме и сгорели две атмеги друг за дружкой.

0

8

т.е., при питании 12в и выше энергии из-за плохой антенны стало столько, что хреновый КСВ просто убил МК. Весьма и весьма возможно!
пересчитайте антенну и сделайте нужную длину

0

9

Тыкнул первый попавшийся калькулятор http://www.cqham.ru/ant08.htm

Введите частоту :  433 (МГц)
Длина полуволновой антенны в свободном пространстве = 15006/F(МГц) 34.65588914549654 (см)

У меня кусок провода 34 см. А первый чип сгорел, когда передатчик питался от 5 В, так что дело скорее всего не в напряжении.

0

10

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

2 Александр Д.
Т.е. отнести передатчик подальше от МК, на метр например? Я ещё передатчик запитал от 15 В (китайцы обещают, что он работает до 18 В), а то при 5 В дальность маловата была.


Главное- настройте антенну по человечески.
Желательно один из слоев платы отдать под землю, особенно под мк. Блокировочные емкости под ноги мк 10-20pf (распространенная практика в мобилах)

Настроить антенну чисто расчетом у Вас скорее всего не получится- соберите простейший индикатор поля
Алгоритм простой- расположите индикатор поля в 30 см от передатчика, возьмите штырь заведомо большей длины, включите передатчик на непрерывную передачу и откусывайте по 1мм до максимума показаний, постепенно отодвигая индикатор дальше.
Крайне желательно операцию проделывать в месте реального расположения передатчика, так "автоматически" учтется проблема ближних объектов и расстройки антенны. После каждого откусывания нужно отходить, чтобы емкостью тела не влиять на настройку антенны.
Лучше всего выносить антенну за экранированный корпус прибора. Питание передатчика обязательно через LC цепочку.

Схема простого индикатора :
http://i46.fastpic.ru/big/2013/0504/9c/52be4e18184f0ea0ddaf2e31cc55589c.jpg
http://www.radioscanner.ru/uploader/2011/my_ind_polya.jpg

ЗЫ. Вы шутите ??? Входное сопротивление полуволнового штыря близко к бесконечности. Вам нужен 1\4 длины волны штырь.

Отредактировано Skull (2015-08-05 09:18:25)

+1

11

Надо не забывать что к любому штырю нужны как минимум пара резонансных противовесов.

0

12

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

Суть проблемы такова.Конструкция состоит из двух частей: первая на Atmega8 меряет напряжение и через 433 МГц передатчик отправляет данные на приёмник. Оттуда вторая часть на такой же Atmega8 берёт данные и выводит на экран 1602.Так вот, в передатчике умирает уже второй чип. Он перестаёт работать и определяться программатором. Не сразу, сначала всё хорошо, а поработав полчаса-час.Почему я решил, что дело в ADC? Ну, во-первых, приёмник на точно таком же контроллере работает, разница только в использовании АЦП. Во-вторых, я делал маленький пробник-осциллограф тоже с использованием внутреннего АЦП, ставил туда и Atmega8 и Atmega88 - результат один: он работает от нескольких минут до получаса и умирает на несколько часов, бывает на сутки. Через несколько часов опять работает как ни в чём не бывало.Получается я ошибся или в схеме, или в программе, или везде.Схема:

А Reset почему не подтянут? может в нем дело? с экранировкой не пробовали играться? КСВ померяйте передатчика. и еще защиту АЦП сделайте на стабилитроне. А лучше буфер на опере типа Rail-to-rail .

0

13

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

да, для авто - нельзя напрямую цеплять МК в бортовую сеть/акквот почитайте: http://techno-mind.ru/avto/pitanie-chuv … bilya.html

у меня уже год как зацепленно и ничего. правда через енку. А АЦП прям на аккум идет через делитель. может потому что авто -дизель?

0

14

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

может потому что авто -дизель?

может потому, что повезло с качественной электроникой/иномаркой

0

15

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

может потому, что повезло с качественной электроникой/иномаркой

Ахаха. там из электроники только мой тахометр . Volvo 82 года выпуска ))))) 244ая

0

16

По итогу экспериментов приёмник тоже стал подглючивать: светодиодом по таймеру моргает, а вот инициализировать LCD1602 не может. Полчаса полежит и опять работает минут 5. Подтяжка Reset добавила стабильности, но сути не изменила. Может не повезло с партией Atmega8?
В закромах нашёл пару Arduino Pro Mini, сделал на них.
Передатчик отнёс на полметра, с помощью простого индикатора поля покромсал антенну (очень примерная штука: чуть сдвинь передатчик или антенну или индикатор - и показания меняются). Антенна получилась что-то около 16 см. С экранами не заморачивался. Start ADC вынес до Do/Loop, без Stop ADC.
Сегодня отвёз тестироваться в полевых условиях, время покажет что получилось. За полдня ничего не умерло.

Возник вопрос: какой длины делать антенну приёмника? Пока что сделал в два раза длинней антенны передатчика - вроде приём получше, нежели с антеннами одинаковой длины.

0

17

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

Может не повезло с партией Atmega8?

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

0

18

Так как успехи после настройки антенны ??

0

19

Пётр написал(а):

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

Повторюсь про странное поведение у приёмной части (светодиодом мигает Timer0). Когда его включишь - на LCD показывает то, что нужно и светодиод мигает. Спустя некоторое время показания на экране перестают меняться, светодиод мигает. Если конструкцию выключить и включить, то экран не инициализируется (горят прямоугольники в верхнем ряду), но светодиод мигает. В чём может быть проблема - непонятно, там кроме экрана и светодиода к МК подключен только 18b20 и приёмник. Если приёмник отключить ничего не меняется. Reset подтянут резистором. Откладываю в сторону на час-другой и опять всё работает как надо.

Как успехи покажут испытания. Отвёз за 60 км, в следующие выходные узнаю как работает. Первые четыре часа всё было хорошо. Единственное - нестабильный приём. То посылки доходят одна за другой, то одна в минуту (посылка из 7 байт). Расстояние между передатчиком и приёмником около 5 м и две деревянные стены.

0

20

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

светодиодом мигает Timer0

Может быть ситуация когда в основном цикле выполняется неизвестно что, но при этом прерывания нормально работают.

Включите детектор снижения напряжения питания и сторожевой таймер.

0

21

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

Глюки дисплея обычно от плохо взломанной версии компилятора. Попробуйте другую или пришлите в ЛС исходник - откомпилирую на лицензионке.

Да, но на Arduino Pro Mini (Atmega328p) все дисплеи работают хорошо. А Atmega8 из одной партии помирает в передатчике и глючит в приёмнике. Может в них дело? (Очень надеюсь, что виноваты не кривые руки =))

0

22

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

Atmega8 из одной партии помирает в передатчике и глючит в приёмнике. Может в них дело?

Что мешает проверить? Например взяв МК из другой партии или залив в МК тестовую прошивку и запитав его от нормального источника питания, что советовал выше.

0

23

Видать ушлый китаец подзаработал на хламе.  :disappointed:

0

24

Действительно, МК пару дней программатором не определялся, поэтому не мог залить тестовую прошивку. Только что определился, но в процессе прошивки выскочила ошибка и опять не определяется. Атмег из других партий у меня сейчас нет.
Покупал тут (антиреклама).

0

25

Что-то слишком дешевые...
Брал на али по 1$ за штуку. В одном из устройств с использованием АЦП, МК работает без сбоев уже почти год.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Почему ADC убивает Atmega8?