Страница 374 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс окт 21, 2012 21:39:45
спящий
На асме сделал почти тоже самое,в протеусе работает,а вот это нет(У меня и так непрерывное преобразование,впринципе даже проферку на флаг необязательно.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс окт 21, 2012 22:41:19
vitalik_1984
а если так сделать?
Спойлер
Код: Выделить всё
#include <stdio.h>
#include <mega48.h>
#include <delay.h>
#include <string.h>
#include <io.h>
int x,y;
void main() {
DDRB=0xff;
DDRD=0xff;
DDRC=0b11111110;
#asm("sei") ;
ADCSRA = 0b11100010;// ЗАПУСК ПРЕОБРАЗОВАНИЯ
ADCSRB = 0b00000000;
ADMUX = 0b01100000;
DIDR0 = 0b00000001;
while(1)
{
while (!( ADCSRA&(1<<4)));//ЖДЕМ ФЛАГ ГОТОВНОСТИ
ADCSRA|=(1<<4); //Очистить флаг готовности
PORTB=ADCH;
PORTD=ADCL;
x=ADCH;
y=ADCL;
}
}
Вы ведь не входите в прерывание, так что флаг прерывания некому очистить.И
если используете компилятор GCC лучше не активировать прерывания без блока их обработки.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 22, 2012 05:45:59
спящий
всеравно нет,я испольтзую CV.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 22, 2012 12:37:27
vitalik_1984
А что мешает вам использовать родную функцию read_adc() или же обрабатывать результат в прерывании от Ацп?
Как то я тоже пытался в авторежиме использовать Ацп, не вышло, так и не понял в чем дело.Можно попробовать это в реальном устройстве.
Еще возможно просто частота преобразования для Ацп выбрана слишком высокая. Она должна быть в пределах 200кГц .
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 22, 2012 22:04:05
спящий
read_adc() а как ее активировать? и какой (сейчас прозвучит иностранное слово) хидер(как программист, еще бы понимать) подключить? какой #include подключить.
Впрерывании непомогает,прерывание происходит, а значение не записывается(неизменяется).
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 22, 2012 23:18:15
vitalik_1984
В общем, как бы это повежливее сказать?
Есть такая штука как мастер кода, можно им легко воспользоваться.Значек расположен где то в середине.У меня возле кнопок программирования.Выглядит как звездочка или шестеренка.
Нажимаем на нее.Там можно выбрать тип контроллера, частоту работы.
Во вкладке ADC выбираем галку использовать ADC.Выбираем частоту преобразования.Короче разберетесь там все человеческим языком написано.И Google вам в помощь.Я про переводчик.
Хидеры CVAVR сам подключит.После нужных настроек нажимаете на Значек с шестеренкой уже в этом окне.И сохраняете все что предложит.
ВНИМАНИЕ это действительно только если проект новый без кода.
Если код уже написан, то можно скопировать нужные части автоматического кода нажав на кнопку предварительного просмотра левее шестеренки.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 23, 2012 20:22:29
спящий
Чет вообще неполучается, даже через этот мастер( посмотрите главный цикл,я правиьльно ввожу.
Спойлер
#include <mega48.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
int x;
void main(void)
{
DDRB=256;
DDRC=0;
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2A output: Disconnected
// OC2B output: Disconnected
ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x00;
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-14: Off
// Interrupt on any change on pins PCINT16-23: Off
EICRA=0x00;
EIMSK=0x00;
PCICR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=0x00;
// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
ADCSRB=0x00;
// ADC initialization
// ADC Clock frequency: 62,500 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
// Only the 8 most significant bits of
// the AD conversion result are used
// Digital input buffers on ADC0: Off, ADC1: On, ADC2: On, ADC3: On
// ADC4: On, ADC5: On
DIDR0=0x01;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA7;
ADCSRB&=0xF8;
while (1)
{
read_adc(x);
PORTB=x;
};
}
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 23, 2012 20:55:56
vitalik_1984

блин, похоже вам не стоит заниматься программированием.
Вы разве не поняли, что функцией пользоваться нужно read_adc(номер ноги Ацп);
Ваш пример
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 23, 2012 21:14:45
спящий
Просто я думал что DIDR0=0x01; это и есть номер входа в АЦП,а так спасибо получилось.
а при
read_adc(x); x присваевается значение с функции(прерывания)
я написал
PORTB=read_adc(x); и тоже пашет)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 23, 2012 21:36:21
vitalik_1984
Didr вроде как выключает цифровой канал с ноги.
А номер ноги с которой происходит измерение, устанавливается ADMUX тремя последними битами.
Именно поэтому переменную adc_input смешивают с этим регистром
Код: Выделить всё
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
А возвращает функция как раз значение измерения Ацп.То есть саму команду вызова функции можно использовать вместо переменной.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Сб окт 27, 2012 15:52:31
aam
Всем привет!
Подскажите, кто сталкивался, чем еще отличается ATtiny4313 от ATtiny2313 кроме вдвое бОльшей памяти? Является ли 4313 полным аналогом (кроме памяти), т. е. впаял в ту же плату, зашил ту же прошивку?
Я конечно могу посмотреть ДШ, но сравнивать все характеристики очень геморно, решил сначала здесь спросить, может кто точно знает...
спящий,
read_adc(x) - это функция, Х- это ее параметр, т. е. через Х внутрь функции read_adc передается значение (в данном случае номер входа АЦП). Но никак не наоборот (точнее можно сделать так чтобы значение параметра изменялось функцией, но тогда ей уже надо передавать указатель).
В Си функции могут возвращать значения (результат работы функции). В данном случае функция возвращает результат преобразования - значение типа int16.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 29, 2012 09:36:24
Gudd-Head
aam писал(а):сравнивать все характеристики очень геморно
Достаточно сравнить Список регистров, КМК.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 29, 2012 10:32:59
akl
aam писал(а):... еще отличается ATtiny4313 от ATtiny2313 кроме вдвое бОльшей памяти? Является ли 4313 полным аналогом (кроме памяти), т. е. впаял в ту же плату, зашил ту же прошивку?
Да ничем, кроме объёма памяти, они не отличаются, даже
DS один
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 29, 2012 12:24:44
aam
akl, спасибо.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 29, 2012 12:52:20
Ruslan-maniak
Вобщем вот какое дело. Есть идея запустить FAT на FRAMе. Использую STM32F207. Ни где не могу найти информацию, делал ли кто-нить подобное? Все используют только флэшки которые форматируют на компе. А хотя бы теоретически можно ли ФРАМку с СТМки форматнуть?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 29, 2012 13:27:32
Kavka
Ruslan-maniak писал(а):Вобщем вот какое дело. Есть идея запустить FAT на FRAMе. Использую STM32F207. Ни где не могу найти информацию, делал ли кто-нить подобное? Все используют только флэшки которые форматируют на компе. А хотя бы теоретически можно ли ФРАМку с СТМки форматнуть?
Да уж, по веселили.

На дискете - можно. На жёстком диске - можно. На влэшке, карте памяти - можно. А с какого перепугу нельзя на FRAM этого сделать?
Память - это всего лишь память (микросхема, носитель информации, хранилище). FAT - это способ организации данных (файлов), и без разницы на каком носителе.
Так что хоть в тетрадке в клеточку организовывайте FAT - карандаш плюс стирашка и вперёд.

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 29, 2012 20:20:56
Alexeyslav
Нельзя. По той простой причине, что как правило FAT-таблица отъедает приличный кусок. У вас есть микросхема FRAM на 4Мб чтобы под файлы реально использовать только два? Конечно можно как компромисс использовать FAT12 но однако - такой же переводняк весьма ценного ресурса. Да и имеет ли смысл поддерживать FAT на микросхеме памяти которая никогда не сможет быть подключена самостоятельно без участия контроллера к компьютеру? Если транзитом через контроллер то FAT можно банально эмулировать, а на FRAM хранить файлы в собственном формате, предполагающем бОльшую экономию ценных ячеек.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 29, 2012 23:34:41
nikityan
Добрый день, я начинающий в сфере МК. Сделал плату для ATMEGA32A, написал программу в IAR эмулируюшую светофор. Работаю с портами: A B D спокойно. Могу посылать 1 и 0. Но вот проблемма с портом C4 и C5. C4 не реагирует на посылаемую 1, светодиод не горит. C5 даже если контроллер без прошивки светиться и держит логическую 1. я просто не могу избавиться от напряжения на порте C5.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 29, 2012 23:45:58
Alexeyslav
А ты даташит смотрел? какие функции висят на порту С4 и С5, если там UART - то так и должно быть если UART включен.
Вот на картинке в гугле видно что эти порты имеют функцию TDI и TDO - это соответствует активному SPI-интерфейсу, отключи его и порты вернутся в твое распоряжение.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 30, 2012 02:03:35
akl
nikityan писал(а):... Сделал плату для ATMEGA32A ... проблемма с портом C4 и C5. C4 не реагирует на посылаемую 1, светодиод не горит. C5 даже если контроллер без прошивки светиться и держит логическую 1. я просто не могу избавиться от напряжения на порте C5.
Правильно. Эти лапы при запрограммированном FUSE-бит JTAGEN так и будут себя вести. Попробуйте снять этот бит.