Перейти к содержанию

Программирование Atmega16


Рекомендуемые сообщения

Люди ....со знанием устройства и работы этой микросхемы...отзовитесь. Проблема такая. Купил я этот мк, написал под него прогу. Прога должна выплнять не хитрые действия. Описание: При подаче 1 на на PA0 начать отсчет НУЛЕЙ(изначально там 1, поясню что эти ноги подсоеденены к номеронабирателю) на второй ноге т.е PA1 . сосчитать сколько было размыканий. затем подать еденицу на ногу(portb) соответствующую подсчетам. скажем было 3 размыкания значит подаем 1 на PВ2. подсчет заканчивается как только на PA0 исчезает напряжение.цифр всего унас 10 (от 0...до 9) порт В имеет всего 8 выходов....так что оставшиеся цифры выводим на порт d. к выводам порта а и д подключены светодиоды. в начале программы есть цикл ожидания начала набора, т.е пока номеронабератель не трогать- на РА0 будет ноль и мк будет моргать светодиодом подсоедененным к порту д. как только начался набор номера светодиод перестает моргать и начинает подсчитывать...размыкания в номеренаберателе т.е определять набранную цифру. а затем моргнет нужным светодиодам.

теперь вопросы

1. МК абсолютно не выполняет эту программу, светодиод ожидания моргает с частотой какой захочет...один раз может 3 сек погореть, второй секунд 10 потом 1 секунду....отчего это? размыкания номеронабирателя вообще не считает....обычно после набора загорается 1 светодиод, какой бы номер не набирался, а то и вообще не загорится.

2 Отчего га порту В светодиоды(половина) горит очень тускло. иногда некоторые нормально загорается,но редко....на тех что ярко горят на ноги мк подается 5В, а на тех что тускло около 3В, причем если светодиоды отпаять, то на этих ногах при подаче 1 будет ровно5В!!!!! подсоеденил светодиод, все...кирдык, не более 3В, на тех что ярко горят всегда 5В, когда подается 1. на порту Д таких проблем нет!

Все светодиоды исправны. схема верная...светодтоды ессно подключеня через резюки.

3. ОТКУДА на РА0 берется 2В???? ножка сделана как вход.....и на нее в режиме ожидания вообще ничего не может подаваться!!!!

4. Складывается ощущения что прога заходит в цикл режима ожидания когда захочет...она может поморгать светодиодом ожидания, потом моргнуть...как будто я набрал на номеронабирателе 3(хотя я даже его не трогал) потом опять помаргает(как моргает я описал в п.1)

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

Я вот думаю...а могут ли быть мк бракованые, глюченые....?

 #include <mega16.h>    
#include <m8_128.h>
#include <delay.h>   
void dlsek(void)
{
delay_ms(3000); 
PORTB=0b00000000;
PORTD=0b00000000;
}
void main(void)
{                   
 int n=0  ;
 DDRB=0x11111111; //сделать весь PORTb выходом  
 DDRD=0b00000111; 
 DDRA=0b00000000; 
 while(1){  
 while (PINA.0==0)
 {
 PORTD=0b00000100;  
 delay_ms(100)   ;         \\ режим ожидания набора(моргаем светодиодом)
 PORTD=0b00000000;    
 delay_ms(100) 

 }                  
    while (PINA.0==1)    \\ пока на ножке ра0 есть напруга выполнять
    { 

     if (PINA.1==0)        \\ если на первой ноге ра1 появилась 0 то
      {
      n++;                \\ увеличить счетчик на еденицу
      while (PINA.1==0){}   \\ ждем, пока еденица убереться оттуда чтоб не посчитать ее второй раз
      } 

    }    
   if (!(n==0))
    { 
       switch (n)
         {
          case 1: PORTB.0=1; dlsek();break;     
          case 2: PORTB.1=1; dlsek();break;     
          case 3: PORTB.2=1; dlsek();break;      
          case 4: PORTB.3=1; dlsek();break;     
          case 5: PORTB.4=1; dlsek();break;     
          case 6: PORTB.5=1; dlsek();break;     \\подаем 1 один на нужную ногу
          case 7: PORTB.6=1; dlsek();break;     
          case 8: PORTB.7=1; dlsek();break;    
          case 9: PORTD.0=1; dlsek();break;   
          case 10: PORTD.1=1;dlsek();break;   
          }
      n=0;  
    }


}      
}

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Бывают и палёные МК, но очень редко. ;) , Если купил новую мегу16 то надо отключить фуз JTAG.

А может неправельно прошивку закинул, нужно проводить верефикацию данных после записи...

Электроника это целый океан творчества...

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

верификация проводится норм...а этот фьюз не опасно сбрасывать...я смогу потом шить мк? а просто боюсь напортачит....там говорят есть фуз один который трогать нельзя...иначе шится перестанет...

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

верификация проводится норм...а этот фьюз не опасно сбрасывать...я смогу потом шить мк? а просто боюсь напортачит....там говорят есть фуз один который трогать нельзя...иначе шится перестанет...

Опасно если незнаеш :lol: , JTAG надо убрать...

Электроника это целый океан творчества...

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Честно говоря, подход в коде не самый лучший... Чуть подправил код, работает для схемы как на рис(к светодиодам тока резисторы надо - лень рисовать. Катоды светодиодов к портам, аноды к +5В)

#include <mega16.h>
#include <delay.h>
//----------------Макроопределения-----------------//
#define LED_ON PORTD.2=0
#define LED_OFF PORTD.2=1

#define STATE_DISK PINA.0
#define STATE_COUNT PINA.1
//=================================================//

//----------------Переменные-----------------------//
unsigned char n=0;  //int ни к чему...
unsigned char fl_re_state=0; //флаг изменения состояния
unsigned char fl_count_begin=0; //флаг начала счета
unsigned char fl_count_end=0; //флаг завершения счета (возможна индикация)
//===============================================//

//-------------Функция моргания светодиодом--------//
inline void led_on_off()
{
static unsigned char before_state;
before_state? (LED_ON):(LED_OFF);
before_state=!before_state;
delay_ms(100);
}
//===============================================//

//--------------Функция подсчета размыканий------//
inline void read_count()
{
if(!STATE_COUNT){//если низкий уровень на счетном пине
	if(!(fl_re_state)){n++; fl_re_state=1;}
			}
		   else{fl_re_state=0;} //иначе ставим флаг смены состояния
}
//===============================================//

//-------------------MAIN------------------------//
void main(void)
{
//init
DDRB=0xFF;  //сделать весь PORTB выходом
PORTB=0XFF; //гасим все светодиоды
DDRD=0x04;
DDRA=0x00;
//----

for(;;) //main loop
{
if(STATE_DISK){//если можно считать
	LED_OFF;
	read_count();
	if(!fl_count_begin){//устанавливаем флаг начала приема
	fl_count_end=0;	 
	fl_count_begin=1;

	PORTB=0xFF; //сбрасываем порт здесь, например...
						} //end if(!fl_count_begin)

			}
	else {  //в противном случае мигаем
	   led_on_off();
	   if(fl_count_begin){fl_count_end=1;fl_count_begin=0;}
			} //end if(STATE_DISK)


if (fl_count_end)//если подсчет закончен
							{
//зажигаем нужный светодиод после проверки корректности n
if(1<=n<=8) {PORTB&=~(1<<(n-1));}
  n=0; //сбрасываем
  fl_count_end=0;
  fl_re_state=0;
							} //end if(fl_count_end)

 delay_ms(30); //антидребезг
} //end for(;;)
} //end main()

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

P.S. Подтягивающие резисторы обязательно...

P.P.S. Если текст кода разбивается на две страницы, читается он в четыре раза хуже. При помещении в кодебокс, читаемость программы близка к нулю...

post-20311-1236268507_thumb.jpg

Изменено пользователем Goodefine

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Просто проверьте вашу программу в симуляторе - всего 4 Мб размером VMLAB - очень удобная штука - как использовать подробно расписано на http://forum.cxem.net . Можно еще и PROTEUS скачать - вообще УРАГАН штукенция ! потяжелей правда.

Ссылка на комментарий
Поделиться на другие сайты

Просто проверьте вашу программу в симуляторе - всего 4 Мб размером VMLAB - очень удобная штука - как использовать подробно расписано на http://forum.cxem.net . Можно еще и PROTEUS скачать - вообще УРАГАН штукенция ! потяжелей правда.

Ага ...я еще месяц на изучение потрачу....я на си то никогда не писал....время сколько потратил , чтоб вот эту неработающую прогу состряпать....

Я одного не могу понять!!!! ПОЧЕМУ она не работает....да...возможно не самый лучший подход со стороны логики, но рабоать то должно.......и почему на порту Б не все светодиоды горят как надо!!!!

Goodefine , тебе огромное спасибо!!! щас схемку переделаю, и попробую твой вариант...потом отпишусь

Ссылка на комментарий
Поделиться на другие сайты

В принципе прога работает НО....моргание светодиодом ожидания...почему то происходит в неравномерное промежутки времени....например, может три раза быстро моргнуть....потом медленно начинает...и еще светодиоды на порту Б все ГОРЯТ постоянно(когда наборником набираешь...моргает нужный светодиод..и опять постоянно горит). Слава богу хоть наборник заработал, цифру определяет верно....))))

вот....

Ссылка на комментарий
Поделиться на другие сайты

...и еще светодиоды на порту Б все ГОРЯТ постоянно...

Схему всего девайса в студию...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

06032009003.rarрезисторы по 620 ОМ. Просьба не смеятся, если я неправильно нарисовал светодиоды, но плюсом они подсоеденены к резюкам. Забыл светодид нарисовать на порту Д(светодиод ожидания)а в остальном вроде все! не считая разъема ISP на плате.

Еще вопрос(тупой), чтобы отключить JTAG нужно при программировании поставит галку на фьюзе JTAGEN? СМОГУ ли я шить после этого через ISP(программатор юсб BM9010? я знаю что уже отвечали...надо просто убедиться что это не шутка...

Изменено пользователем gonzik
Ссылка на комментарий
Поделиться на другие сайты

Gonzik, найдите десять отличий со схемой в моем посте.

1. Естественно, по твоей схеме светодиоды гореть будут постоянно - в программе логика работы инвертирована, поскольку правильнее включать их путем подключения к нулю(другим концом на плюс). Чтобы не горели все сразу, можно прогу подправить, или правильно припаять...

2.Где подтягивающие к земле резисторы после кнопок (примерно по 3 - 5кОм)? Без них входы будут находиться в Z состоянии, а это верный способ наловить глюков...

3. JTAG у меги 16 в порту C, отключать можно. Но для этого надо считать ВСЕ(!) фьюзы, JTAG изменить на противоположный и переписать снова....

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Заработало!!!! Ты..ГЕНИЙ! я уже 3 недели со всем этим парюсь...

Если не трудно...укажи на мои ошибки! почему у меня МК ловил вышеописанные глюки. Почему не работала прога(вроде верно написана)? Почему лучше ноги МК использовать как землю? и др.....

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

ОГРОМНОЕ тебе СПАСИБО!

Ссылка на комментарий
Поделиться на другие сайты

А как на счет заглянуть в даташит?

Посмотри нагрузочную способность портов ввода/вывода и увидишь, что у большинства портов она отличается для "0" и "1"

Посмотри на схему портов, тоже есть в даташите, а потом подумай, какой уровень сигнала будет на КМОП входе без "подтяжки".

(подсказка - неопределенный, потому и глюки)

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

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

Ни кто и не ругается. Извини, если обидел.

Но литературу почитай, есть какие-то базовые вещи, без которых никуда.

Очень советую "Искуство Схемотехники", хотя она и толстая :)

И всегда смотри даташиты на те компоненты, которые используешь.

Изменено пользователем Migray

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

  • 4 года спустя...

Но литературу почитай, есть какие-то базовые вещи, без которых никуда.

Очень советую "Искуство Схемотехники", хотя она и толстая :)

За "Искуство Схемотехники" верно подметил ,очень нужная и полезная вешь.Не изучивши ее многих вещей не поймош даже фундаметальних

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...