реклама на сайте
подробности

 
 
> Глюки AVRStudio+WinAVR или в моей голове, нет возможности правильно Отладить программу на си
Чиппер
сообщение Dec 2 2012, 12:59
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 27-12-09
Пользователь №: 54 511



вот листинг моей программы , это грубо говоря пищалка против клопов ультро звуковая ,
должна настраиваться переменным резистором подключенным к порту а на нужной частоте.
Но факт в том что программа на каторой компелируется текст начинает глючить , то проходит через прерывание таймера Т1 по три раза , то скачет через строчку и появляется после нескольких
десятков нажатий F11 в разных местах. Самое интересное что эту же программу я заредил в VMLAB
Она и там показала ту же окалесицу. Я с этой бедой борюсь больше 2 лет ( а мне не смешно.)
Голова кругом!!! То-ли менять компилятор (я к этому то долгл приноравливался ) , То ли писать на Ассемблере. Я бы с Удовольствием выложил видео Файл Что эта программа вытворяет , если покажите куда.



#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/signal.h>


volatile unsigned char a;

#define INVBIT(x,y) (x^=(1<<y))


ISR(TIMER1_OVF_vect)
{

INVBIT(PORTB,PB1);// управление светодиод
INVBIT(PORTB,PB0);// управление светодиод
a=0;

}








void display(void);

int main(void)
{
TIFR =0;
TIMSK=0x04;// прерывание по перепол т1
TCCR1A=0;
TCCR1B=1;
TCNT1=65535-500;
sei();

SFIOR=0;
ADCSRA=0xe0;

SFIOR=0;
DDRA=0x00;//in
DDRB=0xff;//out
DDRC=0xff;//out
DDRD=0x00;//in

PORTA=0x00;
PORTB=0x01;
PORTC=0x00;
PORTD=0x00;


ADMUX=1;//vibor vhoda

horo:
ADMUX=1;
_delay_ms(1000);
ADCCompare=ADC;
ADCCompare=ADCCompare/3;
ADCCompare=500-ADCCompare;
TCNT1=65535-ADCCompare;

a=1;

horo1:


if (a==0)
{goto horo;}



goto horo1;





}

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Чиппер
сообщение Dec 7 2012, 14:57
Сообщение #2





Группа: Участник
Сообщений: 10
Регистрация: 27-12-09
Пользователь №: 54 511



Переделал вот листинг
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

volatile unsigned int a; // èçìåíÿåìàÿ äëèòåëüíîñòü ìîðãàíèé
volatile unsigned int ADCCompare; //

#define SETBIT(x,y) (x|=(1<<y))
#define CLRBIT(x,y) (x&=~(1<<y))
#define INVBIT(x,y) (x^=(1<<y))
#define CHKBIT(x,y) (x&(1<<y))
#define BITON(x,y) (x&(1<<y))
#define BITOFF(x,y) (!(x&(1<<y)))



ISR(TIMER1_OVF_vect)
{

INVBIT(PORTB,PB1);//
INVBIT(PORTB,PB0);//
a=0;

}

// ((PIND & 0x04) == 0 ) ïðîâåðèòü åñëè 4 áèò = 0
// ((PIND & 0x04) != 0 ) ïðîâåðèòü åñëè 4 áèò = 1
// 7654 3210
// 1000 0000 = 80
// 0100 0000 = 40
// 0010 0000 = 20
// 0001 0000 = 10
// 0000 1000 = 08
// 0000 0100 = 04
// 0000 0010 = 02
// 0000 0001 = 01


int main(void)
{
TIFR =0;
TIMSK=0x04;// ïðåðûâàíèå ïî ïåðåïîë ò1
TCCR1A=0;
TCCR1B=1;
TCNT1=65535-500;
cli();

SFIOR=0;
ADCSRA=0xe7;

SFIOR=0;
DDRA=0x00;//in
DDRB=0xff;//out
DDRC=0xff;//out
DDRD=0x00;//in

PORTA=0x00;
PORTB=0x01;
PORTC=0x00;
PORTD=0x00;


ADMUX=1;//vibor vhoda



horo:

TCNT1=65535-(500-(ADC/3));
a=1;

horo1:


if ( ADIF==1)
{goto horo;}



goto horo1;
}



Оптимизацию сделал на ноль и на один тоже ставил
в листинге на строчке а=1 в программе проподает стрелка при значении CYCLE COUNTER 204 А ЕСЛИ НАЖАТЬ ПАУЗУ ЭТО ЖЕ ЗНАЧЕНИЕ УЖЕ РАВНО 3206010 , ПРИ ЧЕМ НИ КАКИЕ ТОЧКИ ОСТАНОВА РАССТАВЛЕННЫЕ В РАЗНЫХ МЕСТАХ ПРОГРАММЫ И ПРЕРЫВАНИЯ НЕ СРАБАТЫВАЮТ. КАК ТО РАЗ ДАЖЕ ОСТАНОВИ ПРОГРАММУ ГДЕ СТРЕЛА ВЫШЛА ЗА ЛИСТИНГ ПРОГРАММЫ . кАК ОТЛАЖИВАТЬ ПРОГРАММУ ВООБЩЕ НЕ ПОНЯТНО((
Go to the top of the page
 
+Quote Post
V.K
сообщение Dec 7 2012, 15:20
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 6-05-06
Из: РФ
Пользователь №: 16 841



Вставьте:

asm("nop");

и на этой строке сделайте точку останова.

Помогает.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Чиппер   Глюки AVRStudio+WinAVR или в моей голове   Dec 2 2012, 12:59
- - alexeyv   1. Какой чип? 2. Какая тактовая частота? В даташит...   Dec 3 2012, 03:50
- - Чиппер   Проц Mega16l , Тактовая частота 16 мегагерц . Пыта...   Dec 3 2012, 06:53
|- - Палыч   Цитата(Чиппер @ Dec 3 2012, 10:53) Пытаюс...   Dec 3 2012, 08:22
|- - Чиппер   Цитата(Палыч @ Dec 3 2012, 21:22) Насколь...   Dec 3 2012, 09:50
- - alexeyv   1. Если FCPU =16МГц, то необходимо поставить делит...   Dec 3 2012, 08:33
- - ILYAUL   Есть столько сайтов , что бы сбросить и дать ссылк...   Dec 3 2012, 12:58
- - Чиппер   Нашел , скачивайте и посмотрите . http://files.mai...   Dec 4 2012, 13:44
- - alexeyv   Цитата1 .Зачем мне включать делитель если частотой...   Dec 5 2012, 04:07
- - Чиппер   (( Попробывал Теже яйца только в профиль. Я вот вс...   Dec 8 2012, 12:46
|- - _Артём_   Цитата(Чиппер @ Dec 8 2012, 14:46) этот г...   Dec 8 2012, 14:09
- - alexeyv   Где-то примерно так: CODE #include <avr/io.h...   Dec 10 2012, 04:45
- - TriD   Не вдаваясь в тонкости реализации программы, скажу...   Dec 10 2012, 13:20
|- - Чиппер   Цитата(TriD @ Dec 11 2012, 02:20) При оши...   Dec 13 2012, 13:06
|- - demiurg_spb   Понизьте уровень оптимизации до 0 или 1 тогда можн...   Dec 13 2012, 13:54
- - TriD   Цитата(Чиппер @ Dec 13 2012, 17:06) Спаси...   Dec 16 2012, 12:20
- - Чиппер   Еще один вопрос Синтаксис Глобальных переменных Ка...   Dec 22 2012, 00:48
- - demiurg_spb   Цитата(Чиппер @ Dec 22 2012, 04:48) Стран...   Dec 22 2012, 07:25


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016