Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение спящий »

На асме сделал почти тоже самое,в протеусе работает,а вот это нет(У меня и так непрерывное преобразование,впринципе даже проферку на флаг необязательно.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 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 лучше не активировать прерывания без блока их обработки.
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение спящий »

всеравно нет,я испольтзую CV.
Вложения
Безымянный.GIF
(94.72 КБ) 308 скачиваний
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

А что мешает вам использовать родную функцию read_adc() или же обрабатывать результат в прерывании от Ацп?
Как то я тоже пытался в авторежиме использовать Ацп, не вышло, так и не понял в чем дело.Можно попробовать это в реальном устройстве.

Еще возможно просто частота преобразования для Ацп выбрана слишком высокая. Она должна быть в пределах 200кГц .
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение спящий »

read_adc() а как ее активировать? и какой (сейчас прозвучит иностранное слово) хидер(как программист, еще бы понимать) подключить? какой #include подключить.

Впрерывании непомогает,прерывание происходит, а значение не записывается(неизменяется).
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

В общем, как бы это повежливее сказать?
Есть такая штука как мастер кода, можно им легко воспользоваться.Значек расположен где то в середине.У меня возле кнопок программирования.Выглядит как звездочка или шестеренка.
Нажимаем на нее.Там можно выбрать тип контроллера, частоту работы.
Во вкладке ADC выбираем галку использовать ADC.Выбираем частоту преобразования.Короче разберетесь там все человеческим языком написано.И Google вам в помощь.Я про переводчик.
Хидеры CVAVR сам подключит.После нужных настроек нажимаете на Значек с шестеренкой уже в этом окне.И сохраняете все что предложит.

ВНИМАНИЕ это действительно только если проект новый без кода.
Если код уже написан, то можно скопировать нужные части автоматического кода нажав на кнопку предварительного просмотра левее шестеренки.
В поисках истины человек развивается.
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение спящий »

Чет вообще неполучается, даже через этот мастер( посмотрите главный цикл,я правиьльно ввожу.

Спойлер#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;
};
}
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

:facepalm: блин, похоже вам не стоит заниматься программированием.
Вы разве не поняли, что функцией пользоваться нужно read_adc(номер ноги Ацп);
Ваш пример

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

PORTB=read_adc(0); 
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение спящий »

Просто я думал что DIDR0=0x01; это и есть номер входа в АЦП,а так спасибо получилось.
а при
read_adc(x); x присваевается значение с функции(прерывания)


я написал
PORTB=read_adc(x); и тоже пашет)
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение vitalik_1984 »

Didr вроде как выключает цифровой канал с ноги.
А номер ноги с которой происходит измерение, устанавливается ADMUX тремя последними битами.
Именно поэтому переменную adc_input смешивают с этим регистром

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

 unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE 0xff);  

А возвращает функция как раз значение измерения Ацп.То есть саму команду вызова функции можно использовать вместо переменной.
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение aam »

Всем привет!
Подскажите, кто сталкивался, чем еще отличается ATtiny4313 от ATtiny2313 кроме вдвое бОльшей памяти? Является ли 4313 полным аналогом (кроме памяти), т. е. впаял в ту же плату, зашил ту же прошивку?
Я конечно могу посмотреть ДШ, но сравнивать все характеристики очень геморно, решил сначала здесь спросить, может кто точно знает...

спящий,
read_adc(x) - это функция, Х- это ее параметр, т. е. через Х внутрь функции read_adc передается значение (в данном случае номер входа АЦП). Но никак не наоборот (точнее можно сделать так чтобы значение параметра изменялось функцией, но тогда ей уже надо передавать указатель).
В Си функции могут возвращать значения (результат работы функции). В данном случае функция возвращает результат преобразования - значение типа int16.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

aam писал(а):сравнивать все характеристики очень геморно

Достаточно сравнить Список регистров, КМК.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение akl »

aam писал(а):... еще отличается ATtiny4313 от ATtiny2313 кроме вдвое бОльшей памяти? Является ли 4313 полным аналогом (кроме памяти), т. е. впаял в ту же плату, зашил ту же прошивку?
Да ничем, кроме объёма памяти, они не отличаются, даже DS один
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение aam »

akl, спасибо.
Ruslan-maniak
Открыл глаза
Сообщения: 40
Зарегистрирован: Вт янв 18, 2011 08:15:32

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Ruslan-maniak »

Вобщем вот какое дело. Есть идея запустить FAT на FRAMе. Использую STM32F207. Ни где не могу найти информацию, делал ли кто-нить подобное? Все используют только флэшки которые форматируют на компе. А хотя бы теоретически можно ли ФРАМку с СТМки форматнуть?
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Kavka »

Ruslan-maniak писал(а):Вобщем вот какое дело. Есть идея запустить FAT на FRAMе. Использую STM32F207. Ни где не могу найти информацию, делал ли кто-нить подобное? Все используют только флэшки которые форматируют на компе. А хотя бы теоретически можно ли ФРАМку с СТМки форматнуть?
Да уж, по веселили. :))
На дискете - можно. На жёстком диске - можно. На влэшке, карте памяти - можно. А с какого перепугу нельзя на FRAM этого сделать?
Память - это всего лишь память (микросхема, носитель информации, хранилище). FAT - это способ организации данных (файлов), и без разницы на каком носителе.
Так что хоть в тетрадке в клеточку организовывайте FAT - карандаш плюс стирашка и вперёд. :)
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Alexeyslav »

Нельзя. По той простой причине, что как правило FAT-таблица отъедает приличный кусок. У вас есть микросхема FRAM на 4Мб чтобы под файлы реально использовать только два? Конечно можно как компромисс использовать FAT12 но однако - такой же переводняк весьма ценного ресурса. Да и имеет ли смысл поддерживать FAT на микросхеме памяти которая никогда не сможет быть подключена самостоятельно без участия контроллера к компьютеру? Если транзитом через контроллер то FAT можно банально эмулировать, а на FRAM хранить файлы в собственном формате, предполагающем бОльшую экономию ценных ячеек.
nikityan
Встал на лапы
Сообщения: 91
Зарегистрирован: Сб авг 11, 2012 22:31:57

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение nikityan »

Добрый день, я начинающий в сфере МК. Сделал плату для ATMEGA32A, написал программу в IAR эмулируюшую светофор. Работаю с портами: A B D спокойно. Могу посылать 1 и 0. Но вот проблемма с портом C4 и C5. C4 не реагирует на посылаемую 1, светодиод не горит. C5 даже если контроллер без прошивки светиться и держит логическую 1. я просто не могу избавиться от напряжения на порте C5.
Вложения
ABCD0007.JPG
(98.12 КБ) 264 скачивания
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Alexeyslav »

А ты даташит смотрел? какие функции висят на порту С4 и С5, если там UART - то так и должно быть если UART включен.

Вот на картинке в гугле видно что эти порты имеют функцию TDI и TDO - это соответствует активному SPI-интерфейсу, отключи его и порты вернутся в твое распоряжение.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение akl »

nikityan писал(а):... Сделал плату для ATMEGA32A ... проблемма с портом C4 и C5. C4 не реагирует на посылаемую 1, светодиод не горит. C5 даже если контроллер без прошивки светиться и держит логическую 1. я просто не могу избавиться от напряжения на порте C5.
Правильно. Эти лапы при запрограммированном FUSE-бит JTAGEN так и будут себя вести. Попробуйте снять этот бит.
Ответить

Вернуться в «Разные вопросы по МК»