singlskv 0 7 ноября, 2007 Опубликовано 7 ноября, 2007 · Жалоба .......................Господа(товарисчи... кому как больше нравится...), хватит измываться над автором темы... Автор, полную схему со ВСЕМИ параметрами, полностью софт, и подробное описание того что Вы хотели получить, в студию... Тогда точно найдутся желающие Вам подсказать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mr_onnik 0 8 ноября, 2007 Опубликовано 8 ноября, 2007 · Жалоба Автор, полную схему со ВСЕМИ параметрами, полностью софт, и подробное описание того что Вы хотели получить, в студию... /***************************************************** This program was produced by the CodeWizardAVR V1.25.7a Evaluation Automatic Program Generator © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 02.11.2007 Author : Freeware, for evaluation and non-commercial use only Company : Comments: Chip type : ATmega163 Program type : Application Clock frequency : 4,000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega163.h> #include <stdio.h> #include <stdlib.h> #include <io.h> #include <stdint.h> #include <delay.h> #define F_CPU 4000000UL // Read the AD conversion result unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input; // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSR|=0x40; // Wait for the AD conversion to complete while ((ADCSR & 0x10)==0); ADCSR|=0x10; return ADCW; } // ADC initialization // ADC Clock frequency: 115,200 kHz // ADC Voltage Reference: Int., cap. on AREF void init_avr(void) { PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x00; PORTC = 0x00; DDRC = 0xF0;/* set port C pins 7-4 as outputs, 3-0 as inputs */ PORTD=0x00; DDRD=0x0F; // Global enable interrupts #asm("sei") } // Declare your global variables here void main(void) { unsigned int a = 0; PORTD = 0x00; PORTC = 0x00; // Declare your local variables here init_avr(); while (1) { a = read_adc(0); PORTC.6 = 1; delay_ms(a); PORTC = 0x00; delay_ms(a); }; } Программа CodeVisionAVR. Требуется сделать так, чтобы частота мигания светодиода прямопропорционально зависела от напряжения, подаваемого на ADC0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff Jr. 0 8 ноября, 2007 Опубликовано 8 ноября, 2007 · Жалоба PWM организуй при помощи таймера... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 8 ноября, 2007 Опубликовано 8 ноября, 2007 · Жалоба // ADC initialization // ADC Clock frequency: 115,200 kHz // ADC Voltage Reference: Int., cap. on AREF А где код инициализации ADC ? Вы там случаем битик ADEN выставить не забыли ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeiCh 0 9 ноября, 2007 Опубликовано 9 ноября, 2007 · Жалоба #include <mega163.h> Так ATmega16, как в теме, или ATmega163? AVCC желательно подать ч/з резистор 100 Ом или дроссель 10 мкГ, конденсатор 0.1 мкФ на AVCC, светодиод можно напрямую к порту. В симуляторе бит ADEN выставляется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mr_onnik 0 22 ноября, 2007 Опубликовано 22 ноября, 2007 · Жалоба А где код инициализации ADC ? Вы там случаем битик ADEN выставить не забыли ? Скажу сразу: я не профи в этом деле, поэтому с инициализацией у меня прблемы :( imho, ADEN выставляется в регистре ADCSR? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 23 ноября, 2007 Опубликовано 23 ноября, 2007 (изменено) · Жалоба while (1) { a = read_adc(0); PORTC.6 = 1; delay_ms(a); PORTC = 0x00; delay_ms(a); }; Почитал посты, тут как я понял мало кто использует CV, добавлю свою каплю, так как в CV работал около 1 года. Так вот зацитированная выше мною часть ИМХО должна выглядеть так: while (1) { read_adc(0); //Запуск преобразования АЦП a = ADCW; //Считывание преобразованного значения PORTC.6 = 1; //Установили вывод delay_ms(a); //Пауза PORTC.6 = 0; //Сбросили вывод delay_ms(a); //Пауза }; Если бы удосужились почитать Help на CV, то поняли бы что строка: a = read_adc(0); Представляет собой - чушь Правильность конфигурирования выводов и АЦП не проверяю, Wizard для этого есть Изменено 23 ноября, 2007 пользователем mrKirill Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 23 ноября, 2007 Опубликовано 23 ноября, 2007 · Жалоба Если бы удосужились почитать Help на CV, то поняли бы что строка: Представляет собой - чушь А если бы удосужились посмотреть приведенный исходник, то поняли бы, что это вовсе не функция из библиотеки CV.Правильность конфигурирования выводов и АЦП не проверяю, Wizard для этого есть"Программирование мышкой"? Ну-ну. Скажу сразу: я не профи в этом деле, поэтому с инициализацией у меня прблемы :(Ее у вас просто нет :( Возьмите описание АЦП, раздел регистры, выпишите все три описанных там регистра, далее читая описание на каждый из битов регистра решите, какое значение вам нужно записать в этот бит, чтобы АЦП сделало то, что вы хотите. И поставьте запись этих битов в эти регистры в функцию инициализации перед разрешением прерываний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 23 ноября, 2007 Опубликовано 23 ноября, 2007 · Жалоба А если бы удосужились посмотреть приведенный исходник, то поняли бы, что это вовсе не функция из библиотеки CV. Если бы удосужились более внимательно прочитать пост #17, который я цитировал, то наверное заметили бы, что там внизу текста приведена фраза "Программа CodeVisionAVR.", вот и привел правильный кусок программы для CV. "Программирование мышкой"? Ну-ну. Насколько я понял в деле программирования и конфигурирования он не силен, потому пусть тыкается в Визарде, потом может научится все правильно конфигурировать Лично сам пишу работаю в AVR Studio (для asm), CodeVision и IAR (для С), потому "программирование мышкой" - не ко мне. Офф-топ закончен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 23 ноября, 2007 Опубликовано 23 ноября, 2007 · Жалоба Если бы удосужились более внимательно прочитать пост #17, который я цитировал, то наверное заметили бы, что там внизу текста приведена фраза "Программа CodeVisionAVR.",Удосужился. CodeVisionAVR - это компилятор. Использовать или нет идущие в его комплекте библиотеки - личное дело программиста. В процитированном вами посте #17 библиотеки не используются. Вывод - ссылка на help по библиотекам неуместна.вот и привел правильный кусок программы для CV.Использование библиотек не является ни необходимым, ни тем более достаточным условием правильности программы. Короче - в посте #22 вы вместо ответа на цитируемый пост #17 написали ответ на какие-то свои мысли, да еще с претензией. На что я вам и указал. И это как раз не оффтоп. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 23 ноября, 2007 Опубликовано 23 ноября, 2007 · Жалоба #define ADC_CONTROL (1 << ADEN)|(0 << ADIE)|(0 << ADPS2)|(1 << ADPS1)|(1 << ADPS0) #define MUX_CONTROL (0 << REFS1)|(0 << REFS0)|(0 << ADLAR) // ARef / 10 bit int ReadAdc(unsigned char channel) { ADMUX = MUX_CONTROL | channel; ADCSR = ADC_CONTROL | (1 << ADSC); while ( (ADCSR & (1 << ADIF)) == 0); // wait till conversion completes return ADCW; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 23 ноября, 2007 Опубликовано 23 ноября, 2007 · Жалоба defunct,в CV это не пройдет.Почему-то у него нет хидера ioavrxxx.h или как он там в яре называется. Соответственно,компилятор не поймет атмеловские название битов регистров. Надо или напрямую в байтах загружать или один раз руками прописать и добавить в библиотеку(или содрать иаровский :) . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 23 ноября, 2007 Опубликовано 23 ноября, 2007 · Жалоба в CV это не пройдет.Почему-то у него нет хидера ioavrxxx.h или как он там в яре называется. Соответственно,компилятор не поймет атмеловские название битов регистров. эх :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться