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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 68
Зарегистрирован: Ср июн 20, 2007 18:46:54
Откуда: Красноярск

Сообщение Степаныч »

Ну вот набросаю на скорую руку код который выводит показания ацп на 16*2 дисплей!
include <mega8>
include <delay>
include <stdio>
int result;
char buff[];

interrupt [ADC_INT] void adc_isr(void){
result=ADCW;
}
void main(void){
admux=0;
adcsra=11011111;

lcd_init(16);

while(1){
adcsra=11011111
sprintf(buff,%u,result);
lcd_gotoxy(1,0);
lcd_puts(buff);
delay_ms(1000);
}
}

В коде учитывал моменты только работы с АЦП все что не касается АЦП не писал! Синтаксис CVAVR тк на нем программы всегда пишу! ARV подскажите пожалуйста если не трудно в чем могут быть косяки

Код который я использую еще не доделан сейчас там творческое безобразие :) как доделаю так выставлю ну а что касается работы с ацп то там все так же!
IN GOD WE TRUST
Контактная информация:
Реклама
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Степаныч ..
Могёшь свою схему, хоть на листочке нацарапать, сфоткать сотиком и выложить..
А то - гадать, до бесконечности можно...
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18679
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

не считая того, что я категорически не понимаю, что вы там в ADCSRA пишите, т.е. не могу судить, верно ли это или нет (будем счиатать, что вы там стартуете измерение), я могу указать следующие грабли:
1. result не объявлен volatile.
2. result обновляется в прерывании, а используется в основном цикле. result - двухбайтная переменная, а доступ к отдельным ее байтам осуществляется неатомарно, т.е. после считывания первого байта может произойти прерывание, которое обновит оба байта, а потом считается второй байт. в итоге имеем совершенно левое значение для вывода на дисплей.
3. после старта АЦП сразу же осуществляется вывод на дисплей результата - где ожидание завершения преобразования? скорее всего, выводиться будет мусор, среди которого иной раз будет проскакивать и верное значение. может и наоборот, мусор будет иной раз проскакивать.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 68
Зарегистрирован: Ср июн 20, 2007 18:46:54
Откуда: Красноярск

Сообщение Степаныч »

Регистр ADCSRA=0b11011111 (управляю статусом ацп) - разрешаю работу ацп, запускаю одиночное преобразование, устанавливаю делитель частоты!
Насчет volatile вы верно сказали ведь при прерывании может произойти утеря данных! Ну хорошо чтоб проще было(без двухбайтных величин) делаю
char result;
тогда в обработчике прерывания прописываю
result=ADCH; ------ таким образом будут отображаться только первые восемь бит результата т.е байт что прекрасно влезет в char и все равно я так уже пробовал результат тот же случайные вылеты преобразования
Последний раз редактировалось Степаныч Ср июл 22, 2009 16:43:49, всего редактировалось 2 раза.
IN GOD WE TRUST
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Аватара пользователя
Сообщения: 68
Зарегистрирован: Ср июн 20, 2007 18:46:54
Откуда: Красноярск

Сообщение Степаныч »

Но проблема видно не в программе тк 99 % всей работы ацп делает нормально! Т.е при подаче аналогового сигнала на канал ацп, ацп как ему положено вычисляет значение и выводит вполне нормальные показания а вот когда входе ацп ничего нет изредка выскакивают левые числа типо 0.3V или 0.7V хотя ничего нет на входе ацп!
IN GOD WE TRUST
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 68
Зарегистрирован: Ср июн 20, 2007 18:46:54
Откуда: Красноярск

Сообщение Степаныч »

эх да простят меня модераторы за предыдущий пост!!! :roll: ! Вот моя программа но она абсолютно еще не доделана в часности часы которые я там написал еще не работают по нормальному от таймера ну и пр. косяки но это не так важно! Вы писали что у меня не совсем корректно сделано с выводом на дисплей показаний когда еще не закончено ацп тогда подскажите пожалуйста как в данном случае нормально дождаться завершение ацп преобразования и потом только вывести результат! ARV вы как человек знающий в этой теме(в частности спасибо вам за ваш "моддинг блока питания" мне оч помог он :) ) подскажите мне пожалуйста уж очень хочется довести все до ума :)
IN GOD WE TRUST
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18679
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Видит бог, Степаныч, я нифига не понимаю в вашем коде. кстати, вы в курсе, что код обычно тегом code оформляется на форуме?
1. в обработчике внешнего прерывания: что за хитрые goto? неужели нельзя использовать switch?

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

switch(select){
   case 0: 
   case 1: select++; break;
   case 2: select = 0;break;
}
2. Что за интересные манипуляции с ADCW в обработчике прерывания АЦП? вы в курсе, как рассчитывать "показания" АЦП? adc_data = ADCW * 3.3 / 1024 - это если вам надо, чтобы при входном напряжении, равном опорному, показания были 3.3В

3. В основном цикле та же песня с goto mesto1, что и в ранее рассмотренном прерывании

4. все, про что я говорил ранее, кроме volatile, и в этом коде осталось - неатомарное использование результата АЦП, отсутствие ожидания конца замера...

5. что значит "ничего нет на входе"? вход АЦП просто болтается в воздухе? в этом случае показания могут быть совершенно любыми, причем зависеть это бедт от погоды на Марсе.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 68
Зарегистрирован: Ср июн 20, 2007 18:46:54
Откуда: Красноярск

Сообщение Степаныч »

ARV писал(а):Видит бог, Степаныч, я нифига не понимаю в вашем коде. кстати, вы в курсе, что код обычно тегом code оформляется на форуме?
1. в обработчике внешнего прерывания: что за хитрые goto? неужели нельзя использовать switch?

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

switch(select){
   case 0: 
   case 1: select++; break;
   case 2: select = 0;break;
}
2. Что за интересные манипуляции с ADCW в обработчике прерывания АЦП? вы в курсе, как рассчитывать "показания" АЦП? adc_data = ADCW * 3.3 / 1024 - это если вам надо, чтобы при входном напряжении, равном опорному, показания были 3.3В

3. В основном цикле та же песня с goto mesto1, что и в ранее рассмотренном прерывании

4. все, про что я говорил ранее, кроме volatile, и в этом коде осталось - неатомарное использование результата АЦП, отсутствие ожидания конца замера...

5. что значит "ничего нет на входе"? вход АЦП просто болтается в воздухе? в этом случае показания могут быть совершенно любыми, причем зависеть это бедт от погоды на Марсе.
1. Да спасибо что написали насчет того что код на форуме оформляется по другому честно говоря я до сегодняшнего дня ни разу не выставлял его чисто в форум просто крепил файл с кодом. Ну да ладно!
2. Спасибо за намеки с goto я про switch забыл долго не занимался СИ! С ADCW я все верно работал делил на тысячу я непосредственно в процедуре записи переменных в буфер(sprintf гляньте)!
3. Вот моя проблема то"что значит "ничего нет на входе"? вход АЦП просто болтается в воздухе? в этом случае показания могут быть совершенно любыми, причем зависеть это бедт от погоды на Марсе. " представьте себе я так его и оставил висеть в воздухе! Как я теперь понимаю его надо через резистор в несколько килоом на землю вывести так???


Я понимаю что мой код просто "тупой" :( но я хочу научиться делать все по нормальному вот и спрашиваю вашего совета!
IN GOD WE TRUST
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18679
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

а, извините, зачем вы делили на 1000, если максимальные показания АЦП 1023? какая связь? по-моему, надо делать правильно, а не подгонять под желаемый результат... в сущности, где делить и умножать - особой разницы нет... и даже лучше это делать не в прерывании... но важно, на что делить и на что умножать :)

разумеется, ни один аналоговый вход МК не должен болтаться в воздухе, особенно если он используется в программе!

если вы учитесь, то я бы советовал начинать с простого - поменьше прерываний хотя бы...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог

Сообщение sheva_s »

Поделитесь может у кого-то есть даташит на АТТИНИ13 на русском языке очень надо, а найти немогу. Или может литература в которой описываеться работа с этим контроллером.
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 975
Зарегистрирован: Ср дек 17, 2008 21:54:26
Откуда: Днепропетровск

Сообщение sputnic1436 »

Есть программа в .hex,...
При запуске устройства на LCD индикаторе появляется заставка, а затем уже менюшка самого устройства...
Как убрать заставку с программы контроллера????

И возможно ли это сделать...
Сразу скажу что опыта работы с контроллерами у меня 5 прошитых пиков и 2 атмеги...
Опыта в программировании нет.
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Конвертни из НЕХ в BIN и посмотри полученный файл..
Найдёшь место, где прописана заставка.. вот её, например "забиваешь" символами пробела (20h)..
Она будет выводится - но пустая.. можешь туда своё имя написать...
Держит паяльник хвостом
Аватара пользователя
Сообщения: 975
Зарегистрирован: Ср дек 17, 2008 21:54:26
Откуда: Днепропетровск

Сообщение sputnic1436 »

Ну из hex в bin я еще переведу...
А вот непонятно следующее:
Найдёшь место, где прописана заставка..
Как ее увидеть?
Неужеле там будет прямо "нарисована заставка"?
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Там в теле программы, в этом месте - обычный ASCII-код...
Держит паяльник хвостом
Аватара пользователя
Сообщения: 975
Зарегистрирован: Ср дек 17, 2008 21:54:26
Откуда: Днепропетровск

Сообщение sputnic1436 »

А как можно этот код прочитать?
Т. е. где посмотреть как расшифровывается (какаето таблица символов чтоли...)...
Извиняюсь за терминологию... не програмист...
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Набери в поисковике "таблица ASCII".. только БЕЗ кавычек...
Электрический кот
Аватара пользователя
Сообщения: 1071
Зарегистрирован: Пн май 04, 2009 16:43:07
Откуда: Набережные Челны

Сообщение Hudgun »

Купил сегодня мегу 8 за 170 вечнодеревянных так как тини 2313 стоит 210 руб :shock: Подскажите пожалуйста литературку по этому микроконтроллеру, потому что в основном описывается тинька
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Давайте-ка в Поиск, в Котоссылках было.
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Электрический кот
Аватара пользователя
Сообщения: 1071
Зарегистрирован: Пн май 04, 2009 16:43:07
Откуда: Набережные Челны

Сообщение Hudgun »

Aheir писал(а):Давайте-ка в Поиск, в Котоссылках было.
я нашел только А.В. Белов Самоучитель разработчика устройств на мк АВР. Вот читаю - там в основном про тиньку. Может кто, что конкретное про мегу8 посоветует, если не сложно :)
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

ищи "Микроконтроллеры AVR семейства Mega" А.В.Евстифеева там про все меги, есть такая же книхка про тиньки :wink:
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Ответить

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