Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

программирование микроконтроллеров Atmel серии Mega   Найти похожие ветки 

 
NeyroSpace ©   (2006-05-17 10:55) [0]

Кто-нибудь занимался сабжем? Я недавно начал изучать и появилось несколько вопросов. Никак не могу запустить АЦП на модели mega8535 . Все время, во всех режимах получаю странный результат 11 11111110. Нашел в инете похожие случаи с 8535. Говорят, что в части новых процов брак АЦП. Никто не сталкивался? И еще мучает следующий вопрос: Есть ли какое-нить ограничение по току подаваемому на АЦП?


 
tesseract ©   (2006-05-17 10:59) [1]


> ограничение по току подаваемому на АЦП?

конечно и по току и по напряжению. см маны.

http://www.atmel.ru
http://www.avrfreaks.com


 
Cashmare ©   (2006-05-17 11:01) [2]

Я, собственно, только этими мк и занимаюсь, с 8535 не сталкивался, но в остальных никаких проблем с АЦП не было.


 
NeyroSpace ©   (2006-05-17 11:36) [3]

>tesseract ©   (17.05.06 10:59) [1]
именно в даташите и смотрел, в сводной таблице. Там только про вольтаж. :(


 
*Pavel ©   (2006-05-17 13:38) [4]

Там только про вольтаж. :(
И правильно, причем здесь ток ? Неужели величиной тока ты можешь оперировать не меняя входного напряжения (при условии, что внутреннее сопротивление АЦП неизменно) ?

Опорное напряжение используешь внутреннее или внешнее ?
Внутреннее опорное, по-моему, равно 2,56 V. Если тебе по какм-либо причинам оно не подходит - используй внешнее, там должен быть AREF pin.

Да, кстати, чему равно текущее входное напряжение на АЦП ?


 
NeyroSpace ©   (2006-05-18 12:28) [5]

>*Pavel ©   (17.05.06 13:38) [4]
питание АЦП AVcc = Vcc
Предел напряжения AREF = Vcc
аналоговая земля не подключена

>Неужели величиной тока ты можешь оперировать
Я боюсь сжечь

пробовал уже и примеры прошивать, и сам на асме написал прошил, все время один и тот же результат. Прогу могу показать.
Я уже attiny26 купил, попробую еще с ним.


 
dr Tr0jan ©   (2006-05-18 15:45) [6]

Тут на форуме где-то ссылка пару месйцев назад пробегала: Atmel с нуля - может помнит кто? Там уроки были всякие, примеры. Очень хочется почитать.


 
NeyroSpace ©   (2006-05-18 17:29) [7]

>dr Tr0jan ©   (18.05.06 15:45) [6]
Если уже был опыт общения с асмом, то лучше всего просто прочесть вот эту книгу:
http://lord-n.narod.ru/download/books/walla/mcu/atmelbook.djvu

очень быстро въезжаешь во внутреннюю организацию, а дальше только программить.
Кстати, чем понравились именно Atmel"овские контроллеры - программатор это 5 проводков к LPT порту! Можно прошивать не отключая питания. Есть много компиляторов на C, видел даже на паскале, но он платный ((.


 
Pa5ha   (2006-05-18 22:49) [8]

Топ не читал, но ссылку http://radiokot.ru не нашел. Там очень качественная обучалка. По ней учился, даж несколько статей про самоделки на контроллерах написал. В конце концов там на форуме народ трется умный :)


 
tesseract ©   (2006-05-19 10:45) [9]


> Кстати, чем понравились именно Atmel"овские контроллеры
> - программатор это 5 проводков к LPT порту! Можно прошивать
> не отключая питания. Есть много компиляторов на C, видел
> даже на паскале, но он платный ((.

не на всех 5. У меня рембригада через два провода (SPI) программирует :-)


 
tesseract ©   (2006-05-19 10:52) [10]


>  видел даже на паскале, но он платный ((.


стандартный не платный, майский релиз :
http://www.e-lab.de/AVRco/index_en.html


 
Cashmare ©   (2006-05-19 10:54) [11]

tesseract ©   (19.05.06 10:45) [9]
не на всех 5. У меня рембригада через два провода (SPI) программирует :-)


%) А можно поподробнее? %)


 
tesseract ©   (2006-05-19 10:58) [12]


> %) А можно поподробнее? %)


Новые Atmel могут программироваться 1-5 способами.
Выцырапал где-то в "Чип и дип" тройку книг с лит-ой по atmel.
Чего та там Эльдар наваял. Теперь обновляет прошивку в процах не выпаивая :-)


 
tesseract ©   (2006-05-19 10:59) [13]

автор pascal для atmel : http://www.e-lab.de/img/comics15d.gif :-)))
Натуральный кодер :-)


 
Cashmare ©   (2006-05-19 11:03) [14]

tesseract ©   (19.05.06 10:58) [12]

Да хоть тысячей способов, но не через два провода (SPI)! Питание и земля? :)))


 
Cashmare ©   (2006-05-19 11:05) [15]

tesseract ©   (19.05.06 10:58) [12]
Теперь обновляет прошивку в процах не выпаивая :-)


Это-то понятно, это и называется InSystem Programming...


 
вразлет ©   (2006-05-19 11:21) [16]

Я вообще по RS-232 перешиваю :)


 
tesseract ©   (2006-05-19 11:47) [17]


> Да хоть тысячей способов, но не через два провода (SPI)!
>  Питание и земля? :)))

Почему ?? 1-wire спокойненько так питание по сигнальной шине передаёт.


 
Cashmare ©   (2006-05-19 11:52) [18]

Но SPI же не 1-wire...


 
NeyroSpace ©   (2006-05-22 10:46) [19]

Разобрался я с сабжем. Оказалось АЦП измеряет "-" напряжение, а я подавал "+".

>вразлет ©   (19.05.06 11:21) [16]
имеется ввиду прямое подключение к COM порту компьютера без дополнительной развязки? Или есть что-то вроде MAX232...?

А то напрямую я уже один микроконтроллер по невнимательности угробил. Я знал, что нельзя, чтобы при прошивке напрямую через LPT, напряжение питания на микроконтроллере было меньше 4.5 - 5В, но не уследил. Больше проц из PonyProg не виден ((. Хотя в целом Atmel"овские тараканы очень живучие и прощают многие издевательства)).

А кто-нибудь делал что-нибудь связанное с подключением микроконтроллера непосредственно к Ethernet или WiFi?


 
вразлет ©   (2006-05-22 11:21) [20]

[19] NeyroSpace ©   (22.05.06 10:46)

Не, конечно же через MAX232.


 
Cashmare ©   (2006-05-22 11:34) [21]

NeyroSpace ©   (22.05.06 10:46) [19]
Я знал, что нельзя, чтобы при прошивке напрямую через LPT, напряжение питания на микроконтроллере было меньше 4.5 - 5В


Я тоже это знаю уже лет 6, но ни разу еще ничего не сгорело при подключении напрямую :) Так что, даже это они прощают, причем и tiny, и классики, и меги...


 
tesseract ©   (2006-05-22 11:39) [22]


> А кто-нибудь делал что-нибудь связанное с подключением микроконтроллера
> непосредственно к Ethernet или WiFi?

Существуют преобразователи интерфейса.
Пользуемся  tibbo-котроллерами. так же проходили LANtrinix, Cas Ethernet, neteye.
Wi-fi только у lantronix.


 
NeyroSpace ©   (2006-05-22 17:57) [23]

>Cashmare ©   (22.05.06 11:34) [21]
Мне tiny26 этого не простил. Было 2.5-2.7В, а я начал прошивать. Теперь он в ponyprog больше не виден. Хотя сам контроллер жив, залить в него через "5 проводков" больше ничего не получается.


 
Cashmare ©   (2006-05-22 18:05) [24]

NeyroSpace ©   (22.05.06 17:57) [23]

Я не пользуюсь никакими понипрогами, у меня собственноручно_на_дельфи_написанные программаторы с собственной распиновкой на LPT-порте. Может поэтому меня микроконтроллерный бог и милует :)


 
Defunct ©   (2006-05-22 18:24) [25]


> Разобрался я с сабжем. Оказалось АЦП измеряет "-" напряжение,
>  а я подавал "+".


С какого перепугу?
АЦП меряет как раз +.
"-" вообще-то опасно подавать на вход...


 
NeyroSpace ©   (2006-05-23 09:56) [26]

>Defunct ©   (22.05.06 18:24) [25]
в том-то и дело! я только что с бубном не плясал вокруг него!
Подаю на вход АЦП +1.5В, а он выдает 11 11111110 - т.е. превышение уровня, подаю -1.5В выдает правильный результат. Не знаю почему так.


 
Defunct ©   (2006-05-23 12:33) [27]

> Подаю на вход АЦП +1.5В, а он выдает 11 11111110 - т.е. превышение уровня

Не может быть!
Если вход АЦП соединить с землей будет вам 0, если соединить с Vcc будет вам $3FF.

проверьте лучше входную цепь, есть высокая вероятность того, что вход АЦП подтянут у вас к Vcc, от того и проблема.
Проверьте также чтобы внутренний Pull-up резистор был отключен:
DDRA = 0;
PORTA = 0;


 
antonn ©   (2006-05-23 13:13) [28]

у меня, кстати, в схеме от 0 до 5В подается, положительных 8)
это так, к слову:)


 
NeyroSpace ©   (2006-05-25 09:58) [29]

Входами АЦП у ATmega8535 являются порты А. Я их никак не инициализирую, стало быть
DDRA = 0;
PORTA = 0;

>что вход АЦП подтянут у вас к Vcc
Что имеется ввиду? На схеме у меня выводы "питание АЦП AVcc" = Vcc = ARef = +5В.
Вроде в примерах так тоже показано.


 
Defunct ©   (2006-05-26 01:04) [30]

> Я их никак не инициализирую, стало быть
> DDRA = 0;
> PORTA = 0;

Стало быть так, если в программе нет ошибок.

> Что имеется ввиду?

Имеется в виду, что именно вход PAX, который у вас дает неправильное значение преобразования подтянут к Vcc резистором, поэтому когда вы подаете отрицательное напряжение на входную цепь, то этот резистор дает вам смещение в результате чего вы видите результат преобразования отличный от 0.

> На схеме у меня выводы "питание АЦП AVcc" = Vcc = ARef = +5В.
Ну так подумайте логически. VRef у вас +5В, с какого перепугу АЦП будет работать с "-"? АЦП может мерять только в диапазоне - 0..VRef.

Ощите ошибку в схеме либо в программе. Что именно искать - подсказал.


 
Defunct ©   (2006-05-26 01:07) [31]

> Ощите

Ищите*


 
NeyroSpace ©   (2006-05-26 09:25) [32]

;С Х Е М А:
;AREF = +5v
;AGRND = GRND = -5v
;AVcc = +5v
;на порт А подаем "-"
;
;к портам D подключить светодиоды
;на них выводиться состояния битов АЦП
;
;П Р О Г Р А М М А:
;при срабатывании таймера отображается результат АЦП
;
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8535def.inc"
.def tmp = r16
.def tmpADCH = r17
.def tmpADCL = r18
.def tmp16AH = r19
.def tmp16AL = r20
;начинаем инициализировать таблицу векторов прерывания
;первый адрес - ссылка на адрес запуска
  rjmp INIT_PROG
;далее идет таблица векторов прерывания для mega8535
;=================================================================
  nop; 01 int0  
  nop; 02 int1  
  nop; 03 timer2 comp
  nop; 04 timer2 ovf  
  nop; 05 timer1 capt  
  nop; 06 timer1 compa
  nop; 07 timer1 compb
  nop; 08 timer1 ovf
  rjmp I_Timer0; 09 timer0 ovf
  nop; 10 SPI, STC  
  nop; 11 UART, RX    
  nop; 12 UART, UDRE  
  nop; 13 UART, TX    
  rjmp I_ADC1; 14 ADC    -    nop; 15 EE_RDY  
  nop; 16 ANA_COMP
  nop; 17 TWI    
  nop; 18 INT2  
  nop; rjmp I_Timer0_Comp; 19 TIMER0
  nop; 20 SPM_RDY  
;=================================================================
INIT_PROG: clr tmp
  ldi tmp,high(RAMEND) ; устанавливаем указ. стека на последнюю ячейку RAM
  out SPH,tmp ; Set Stack Pointer to top of RAM
  ldi tmp,low(RAMEND)
  out SPL,tmp

  ldi tmp, 0b11111111 ;$01  0 - вход, 1 - выход
  out ddrd,tmp  ;конфигурируем первую линию порта D как выход
 
  ;+-------------------+
  ;| настраиваем Timer0|
  ;+-------------------+
  ldi tmp, $f0  ;загружаем стартовое значение счетчика
  out TCNT0, tmp  ;в таймер T0
  clr tmp

  sbr tmp, 1<<CS00 ;устанавливаем режим работы Т0 как счетчик
  out TCCR0, tmp   ;1:1 с частотой работы проца
  sbr tmp, 1<<CS02 ;устанавливаем режим работы Т0
  out TCCR0, tmp   ;как 1 на 1024 тактов проца

  sbr tmp, 1<<TOIE0 ;сдвигаем число 00000001 влево TOIE0 раз
       ;разрешение прерывания от Т0 осуществляется
       ;установкой в 1 разряда TOIE0
  out TIMSK, tmp  ;его регистра TIMSK
  ;+-------------------+
  ;| настраиваем АЦП  |
  ;+-------------------+
  ;настраиваем номер канала с которого
  ;берем аналоговый сигнал
  ;берем с порта А канал 0 (PA0)
  clr tmp
  ;опорное напряжение от AVcc + вход PA0
  ldi tmp, (0<<REFS1) + (1<<REFS0) + (0<<ADLAR) + (0<<MUX4) + (0<<MUX3) + (0<<MUX2) + (0<<MUX1) + (0<<MUX0);
  out ADMUX, tmp
  sei  ;разрешаем все прерывания
  ;вкл пересчетные коэф АЦП + начать преобразование  + непрерывный АЦП + прерывание + прерыв по оконч АЦП + коэф. предделителя частоты
  ldi tmp, (1<<ADEN)        + (0<<ADSC)              + (0<<ADATE)      + (0<<ADIF)  + (1<<ADIE)           + (0<<ADPS2) + (1<<ADPS1) + (1<<ADPS0)
  out ADCSRA, tmp
  ;+-------------------+
 
  sleep

 
  ldi tmp, 15
  out WDTCR, tmp
  clt

MainLoop: wdr     ;сброс сторожа
  ldi r17, $00      

  rjmp MainLoop

I_ADC1:

  in tmpADCL, ADCL
  in tmpADCH, ADCH

  reti

I_Timer0:

  sbrs tmpADCL, 0
  cbi portd, 0
  sbrc tmpADCL, 0
  sbi portd, 0

  sbrs tmpADCL, 1
  cbi portd, 1
  sbrc tmpADCL, 1
  sbi portd, 1

  sbrs tmpADCL, 2
  cbi portd, 2
  sbrc tmpADCL, 2
  sbi portd, 2

  sbrs tmpADCL, 3
  cbi portd, 3
  sbrc tmpADCL, 3
  sbi portd, 3

  sbrs tmpADCL, 4
  cbi portd, 4
  sbrc tmpADCL, 4
  sbi portd, 4

  sbrs tmpADCL, 5
  cbi portd, 5
  sbrc tmpADCL, 5
  sbi portd, 5

  sbrs tmpADCL, 6
  cbi portd, 6
  sbrc tmpADCL, 6
  sbi portd, 6

  sbrs tmpADCL, 7
  cbi portd, 7
  sbrc tmpADCL, 7
  sbi portd, 7

  sbi ADCSRA, ADSC
  sleep
  reti

;=====end============

Проще уже не куда. По таймеру в порту D устанавливаем те биты кот установлены в регистре-результате АЦП. АЦП происходит непрерывно. Результат сохраняется в tmpADCL, tmpADCH.
А отображаем результат только по таймеру, где-то 2 раза в сек.


 
вразлет ©   (2006-05-26 09:56) [33]

> Я их никак не инициализирую, стало быть
> DDRA = 0;
> PORTA = 0;

Стало быть так, если в программе нет ошибок.


Не стало быть, надо всегда инициализировать.


 
Defunct ©   (2006-05-26 14:49) [34]

вразлет ©   (26.05.06 09:56) [33]
> Не стало быть, надо всегда инициализировать.

Надо конечно, только по сигналу Reset все регистры в AVR обнуляются, в т.ч. и регистры I/O space.

Ошибка номер раз:

ldi tmp, (0<<REFS1) + (1<<REFS0) + (0<<ADLAR) + (0<<MUX4) + (0<<MUX3) + (0<<MUX2) + (0<<MUX1) + (0<<MUX0);
 out ADMUX, tmp


По вашим словам к ARef подано +5. Вы используете режим AVCC with external capacitor at AREF pin, что соответсвенно не годится в вашем случае.

Поставьте
REFS1..0 = 0 (ARef)


 
NeyroSpace ©   (2006-05-30 19:37) [35]

>Defunct ©   (26.05.06 14:49) [34]
Спасибо, кажется ошибка действительно в схеме была. Сделал более аккуратными связки проводов и все заработало с "+".

Работает и так (0<<REFS1) + (1<<REFS0) и так (0<<REFS1) + (0<REFS0).
А в программе есть небольшая неточность, нужно везде поменять местами
строки, а то светодиоды горели, когда 0 и не светились когда 1. Так правильно:
 sbrs tmpADCL, 0
 sbi portd, 0
 sbrc tmpADCL, 0
 cbi portd, 0



Страницы: 1 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.046 c
15-1149077142
adalx
2006-05-31 16:05
2006.06.25
Вообще-то вопрос по сетям, но мне там не отвечают


15-1148815028
deltav1
2006-05-28 15:17
2006.06.25
Cимплекс-метод


3-1146207610
Некто
2006-04-28 11:00
2006.06.25
X*Y*H


2-1149584617
VitV
2006-06-06 13:03
2006.06.25
Создание компонентов


2-1149485185
bevaine
2006-06-05 09:26
2006.06.25
функция внутри функция