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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Степаныч
Открыл глаза
Сообщения: 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
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 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
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 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
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

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

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

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

Сообщение sheva_s »

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

Сообщение sputnic1436 »

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

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

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

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

Сообщение sputnic1436 »

Ну из hex в bin я еще переведу...
А вот непонятно следующее:
Найдёшь место, где прописана заставка..


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

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

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

Сообщение sputnic1436 »

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

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

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

Сообщение Hudgun »

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

Сообщение Aheir »

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

Сообщение Hudgun »

Aheir писал(а):Давайте-ка в Поиск, в Котоссылках было.

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

Сообщение GP1 »

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

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