Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Вниз

программирование микроконтроллеров 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.01 c
2-1149592300
Fiallo4ka
2006-06-06 15:11
2006.06.25
связи в таблицах


2-1149444053
vegarulez
2006-06-04 22:00
2006.06.25
Как создать фай *.txt и записать в него данные.


3-1146110130
Insane SPIRIT
2006-04-27 07:55
2006.06.25
После SQL-запроса Table1 недоступна!


1-1147948811
BeckLee
2006-05-18 14:40
2006.06.25
Не возвращается фокус


4-1143525270
stas77
2006-03-28 09:54
2006.06.25
события windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский