6 канальный АЦП на ATMega8 (подборка информации)

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

6 канальный АЦП на ATMega8 (подборка информации)

Сообщение Tom91 »

Необходимо создать 6 канальный АЦП на ATMega8 для измерения 6ти напряжений в диапазоне 0-20,0V, отображение на LCD. Так как ни разу не работал с АЦП основная проблема в поиске примерных программ на асме... а именно даже как правильно сделать последовательное измерение со всех 6 входов ???
Реклама
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение CS16AMX »

возьми файл из си и от туда реж куски , они же в асме при компиляции выходят
Реклама
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение CS16AMX »

OUT 0x30,R30
; 750 LcdInit();
RCALL _LcdInit
; 751 // ADC initialization
; 752 // ADC Clock frequency: 1000,000 kHz
; 753 // ADC Voltage Reference: AREF pin
; 754 ADMUX=ADC_VREF_TYPE & 0xff;
LDI R30,LOW(0)
OUT 0x7,R30
; 755 ADCSRA=0x83;
LDI R30,LOW(131)
OUT 0x6,R30
; 756
; 757 // LCD module initialization
; 758
; 759 #asm("sei")
sei
; 760 LcdMode(2);
LDI R30,LOW(2)
ST -Y,R30
RCALL _LcdMode
; 761 while (1)
_0x80:
; 762 {
; 763
; 764
; 765
; 766 ovf=0; //Обнуляем
CLR R8
; 767 TCNT1=0;
LDI R30,LOW(0)
LDI R31,HIGH(0)
OUT 0x2C+1,R31
OUT 0x2C,R30
; 768 TCCR1B=7; //Включаем счетчик с внешним генератором, пин T1
LDI R30,LOW(7)
OUT 0x2E,R30
; 769
; 770 // эти значения нужно подогнать
; 771 delay_ms(999);
LDI R30,LOW(999)
LDI R31,HIGH(999)
RCALL SUBOPT_0x4
; 772 delay_us(162);
__DELAY_USW 324
; 773
; 774
; 775 TCCR1B=0; //Выключаем счетчик
LDI R30,LOW(0)
OUT 0x2E,R30
; 776 freq.ivalue[1]=ovf;
MOVW R26,R28
ADIW R26,2
MOV R30,R8
LDI R31,0
ST X+,R30
ST X,R31
; 777 freq.ivalue[0]=TCNT1;
IN R30,0x2C
IN R31,0x2C+1
ST Y,R30
STD Y+1,R31
; 778 LcdClear();
RCALL _LcdClear
; 779 i=LCD_STRLEN;
LDI R17,LOW(12)
; 780 lcd_buf='0';
RCALL SUBOPT_0x6
RCALL SUBOPT_0x7
LDI R26,LOW(48)
STD Z+0,R26
; 781 while(i>sizeof(txt))
_0x83:
CPI R17,6
BRLO _0x85
; 782 {
; 783
; 784 if (freq.lvalue) lcd_buf=freq.lvalue%10+0x30;
__GETD1S 0
RCALL __CPD10
BREQ _0x86
RCALL SUBOPT_0x6
RCALL SUBOPT_0x7
PUSH R31
PUSH R30
RCALL SUBOPT_0xA
RCALL __MODD21U
__ADDD1N 48
POP R26
POP R27
ST X,R30
; 785 else if(i!=LCD_STRLEN) lcd_buf='';// в место нолика пробел
RJMP _0x87
_0x86:
CPI R17,12
BREQ _0x88
RCALL SUBOPT_0x6
RCALL SUBOPT_0x7
LDI R26,LOW(0)
STD Z+0,R26
; 786 freq.lvalue/=10;
_0x88:
_0x87:
RCALL SUBOPT_0xA
RCALL __DIVD21U
__PUTD1S 0
; 787 i--;
SUBI R17,1
; 788 }
RJMP _0x83
_0x85:
; 789 while(i--)
_0x89:
MOV R30,R17
SUBI R17,1
CPI R30,0
BREQ _0x8B
; 790 {
; 791 lcd_buf[i+1]=txt;// txt[]="част";
RCALL SUBOPT_0x6
MOVW R0,R30
__ADDW1MN _lcd_buf,1
MOVW R26,R30
MOVW R30,R0
SUBI R30,LOW(-_txt*2)
SBCI R31,HIGH(-_txt*2)
LPM R30,Z
ST X,R30
; 792
; 793 }
RJMP _0x89
_0x8B:
; 794 n=read_adc(0); //порты
LDI R30,LOW(0)
RCALL SUBOPT_0xB
MOVW R12,R30
; 795 k=read_adc(1);
RCALL SUBOPT_0x3
RCALL _read_adc
STS _k,R30
STS _k+1,R31
; 796 a=read_adc(2);
LDI R30,LOW(2)
RCALL SUBOPT_0xB
STS _a,R30
STS _a+1,R31
; 797 y=read_adc(3);
LDI R30,LOW(3)
RCALL SUBOPT_0xB
STS _y,R30
STS _y+1,R31
; 798 x=read_adc(4);
LDI R30,LOW(4)
RCALL SUBOPT_0xB
STS _x,R30
STS _x+1,R31
; 799 e=read_adc(5);
LDI R30,LOW(5)
RCALL SUBOPT_0xB
STS _e,R30
STS _e+1,R31
; 800 u=read_adc(7);
LDI R30,LOW(7)
RCALL SUBOPT_0xB
STS _u,R30
STS _u+1,R31
; 801 LcdString(1,1);
RCALL SUBOPT_0x3
RCALL SUBOPT_0x3
RCALL SUBOPT_0xC
; 802
; 803 {sprintf (lcd_buf, "v=%u : %u", k,n); }
LDS R30,_k
LDS R31,_k+1
RCALL SUBOPT_0xD
MOVW R30,R12
RCALL SUBOPT_0xD
RCALL SUBOPT_0xE
; 804 LcdString(1,3);
LDI R30,LOW(3)
ST -Y,R30
RCALL SUBOPT_0xC
; 805 {sprintf (lcd_buf, "v=%u : %u", a,y); }
LDS R30,_a
LDS R31,_a+1
RCALL SUBOPT_0xD
LDS R30,_y
LDS R31,_y+1
RCALL SUBOPT_0xD
RCALL SUBOPT_0xE
; 806 LcdString(1,4);
LDI R30,LOW(4)
ST -Y,R30
RCALL SUBOPT_0xC
; 807 {sprintf (lcd_buf, "v=%u : %u",x,e ); } // область
LDS R30,_x
LDS R31,_x+1
RCALL SUBOPT_0xD
LDS R30,_e
LDS R31,_e+1
RCALL SUBOPT_0xD
RCALL SUBOPT_0xE
; 808 LcdString(1,5);
LDI R30,LOW(5)
ST -Y,R30
RCALL _LcdString
; 809 {sprintf (lcd_buf, " v=%u",u ); } // область
LDI R30,LOW(_lcd_buf)
LDI R31,HIGH(_lcd_buf)
RCALL SUBOPT_0x9
__POINTW1FN _0,10
RCALL SUBOPT_0x9
LDS R30,_u
LDS R31,_u+1
RCALL SUBOPT_0xD
LDI R24,4
RCALL _sprintf
ADIW R28,8
; 810 LcdString(1,6);
RCALL SUBOPT_0x3
LDI R30,LOW(6)
ST -Y,R30
RCALL _LcdString
; 811 LcdUpdate();
RCALL _LcdUpdate
; 812
; 813 }
RJMP _0x80
; 814 }
_0x8C:
RJMP _0x8C
; 815

#ifndef __SLEEP_DEFINED__
#define __SLEEP_DEFINED__
.EQU __se_bit=0x80
.EQU __sm_mask=0x70
.EQU __sm_powerdown=0x20
.EQU __sm_powersave=0x30
.EQU __sm_standby=0x60
.EQU __sm_ext_standby=0x70
.EQU __sm_adc_noise_red=0x10
.SET power_ctrl_reg=mcucr
#endif
_getchar:
sbis usr,rxc
rjmp _getchar
in r30,udr
RET
_putchar:
sbis usr,udre
rjmp _putchar
ld r30,y
out udr,r30
ADIW R28,1
RET
надеюсь найдёш тут что ищеш
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение Tom91 »

CS16AMX, конечно спасибо за ответ, но Ваш код для меня не читаем... :( Интересуют исходники только на асме и поболее комментариев... :)
Реклама
Эиком - электронные компоненты и радиодетали
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение CS16AMX »

к сожалении в асме дуб , вот и резанул код из компиллера, знаю что некотрые могут из него работать
Реклама
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение Tom91 »

CS16AMX писал(а):к сожалении в асме дуб , вот и резанул код из компиллера, знаю что некотрые могут из него работать
Самое главное никогда не выкладывай то, в чём сам не разобрался - запутаешь всех остальных... :wink:
Реклама
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение CS16AMX »

хуже когда лежит ненужное ,а ктото ето ищет)
типа не себе ,не людям....
orinoko

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение orinoko »

Вообще то задача, даже для начинающего программиста , очень несложная. В даташитах на мегу прекрасно написано , как работать с АЦП, и это совсем несложно, а в описании на индикатор замечательно разжёвано, как с ним общаться.
А ведь следующим вопросом наверное будет, как подать 20В на вход АЦП
Вот пример инициализации АЦП на меге16 на асме

Код: Выделить всё

		; отключаем JTAG
		ldi		temp0,	0x80
		out		MCUCSR,	temp0
		; Порт F на ввод (и отключаем подтяжку)
		ldi		temp0,	0
		sts		PORTF,	temp0
		ldi		temp0,	0
		sts		DDRF,	temp0
		;Включим АЦП - делитель на 128
		ldi		temp0,	0b10000111
		out		ADCSRA,	temp0
		; ИОН  - внутренний с внешним конд. на AREF
		ldi		temp0,	0xC0	
		out		ADMUX,	temp0
		;Запустим один раз АЦП
		sbi		ADCSRA,	ADSC
init_adc_wait:
		sbis	ADCSRA,	ADIF
		rjmp	init_adc_wait
И что тут сложного? Если, конечно, почитать даташит неспеша и с пониманием. Да, может не с первого раза что-то заработать, но ведь в этом то и смысл познания. А чтоб не заниматься паянием, можно пока установить и поиграться Протеусом. Вашу задачу он сэмулирует лёгко.
Или вам нужно просто быстро сделать и забыть?
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение Tom91 »

orinoko, спасибо :)

1. Интересует как сделать последовательный опрос 6 каналов, понятно что нужно переключать входы, регистр MUX... я так понимаю при помощи опроса бита ADSC(тоесть как только он сбрасывается переключаем регистр MUX и так по кругу?),
или следует использовать ADIF ?

2. Следует использовать внешний ИОН (на 431 например) ? В чём приимущество по сравнению с внутренним ИОН в Меге8 ?

3. Как осуществить защиту по входу? ....видел ставять ОУ с стабилитронами по входу, в чём приимущество ОУ... только в повышении чувствительности?
murzila
Мучитель микросхем
Сообщения: 436
Зарегистрирован: Сб апр 10, 2010 16:46:26

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение murzila »

Может быть, имело смысл написать «Разработайте 6-канальный АЦП, об оплате договоримся»? Если же действительно хотите научиться, обложитесь даташитами, «поставьте на уши» гугл, разберитесь в чужих исходниках.
У многих в детстве тоже не было осциллографов, а также и компьютеров с интернетом, но если было огромное желание, то обходились книгами и журналами... Без обид.
Аватара пользователя
Fasterpast
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Ср фев 14, 2007 12:07:58
Откуда: Москва
Контактная информация:

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение Fasterpast »

Защиту по входу можно сделать обычным стабилитроном на 5В, но есть посложнее и поэффективнее способы.
А с 20В до 5 сбрасывать резистивным делителем.
В принципе, это на самом деле основы основ, ищите.

А преимущество внешнего ИОН перед внутреннем - в точности, разумеется. Конечно, при соблюдении всех условий его подключения...
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение Tom91 »

Fasterpast писал(а):Защиту по входу можно сделать обычным стабилитроном на 5В, но есть посложнее и поэффективнее способы.
И какие же это способы?
Fasterpast писал(а): А преимущество внешнего ИОН перед внутреннем - в точности, разумеется. Конечно, при соблюдении всех условий его подключения...
А привести примеры отражающие на сколько точно? (сравнительно с TL431)
Аватара пользователя
Fasterpast
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Ср фев 14, 2007 12:07:58
Откуда: Москва
Контактная информация:

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение Fasterpast »

Скажите честно, вы даташит на атмегу читали? :) Или легче просто в форумах спросить?
Встроенный ИОН имеет диапазон напряжений от 2.3 до 2.9В, а у того же TL431 погрешность 3мВ паспортная...
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: 6 канальный АЦП на ATMega8 (подборка информации)

Сообщение pyzhman »

Fasterpast писал(а):Скажите честно, вы даташит на атмегу читали? :) Или легче просто в форумах спросить?
Встроенный ИОН имеет диапазон напряжений от 2.3 до 2.9В, а у того же TL431 погрешность 3мВ паспортная...
Тут же возмущаемся, тут же разжевываем и в рот кладем. Что за подход? Не понимаю... По сути. В книжках Евстифеева все аккуратно написано. Да тупо перевод даташитов. Но все разложено по полкам. В частности по работе с АЦП.
Docendo discimus
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»