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

 
 
21 страниц V  « < 4 5 6 7 8 > »   
Reply to this topicStart new topic
> Изменение текста программы при смене компилятора и чипа
_Pasha
сообщение Dec 18 2010, 03:47
Сообщение #76


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Ниасилил весь топик, но
1. Автору - пользуйтесь codebox вместо code
2. Там - в последнем тексте - много чего неправильно, например, не проинициализировали таймер, неправильно main() объявили итд
Хотел типопоказать, как надо, но прямо сейчас не выйдет по времени. Я-то выложу, но и Вы тоже даром не сидите, в ожидании. Успехов.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 18 2010, 14:08
Сообщение #77


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Нда... остаётся теперь только догадываться что вы ставили и как создавали проект.... студия по идее сама мэйкфайл создаёт и с этим проблем быть не должно вообще...

Пробуйте для начала вообще создать новый проект и добавить туда ваш .c файлик.
Вы скачали и установили в точности то, что я Вам советовал несколькими страницами раньше? помнится я даже ссылки давал там.... проверьте всё ещё раз.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 18 2010, 14:40
Сообщение #78


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Скачал и установил всё как вы рекомендовали.
Создаю новый проект-выбираю AVR GCC-пишу имя проекта-next-AVR simulator-ATtiny2113-finish
набираю или вставляю текст проги кнопка старта дебуга неактивна а при компиляции ругается wacko.gif
чё делать?????????
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 18 2010, 16:24
Сообщение #79


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Для начала давайте ка всю папку проекта как есть запаковывайте WinRarом и присылайте сюда.
Надо определиться проблема с проектом или же со средой...


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 18 2010, 17:21
Сообщение #80


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Вот всё что там есть
Прикрепленный файл  proba.rar ( 2.77 килобайт ) Кол-во скачиваний: 68




Сообщение отредактировал RW6MKA - Dec 18 2010, 17:23
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 18 2010, 20:54
Сообщение #81


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Путь к проекту не должен содержать русских букв и, наверное, sm.gif пробелов..
Лично я ВСЕГДА стараюсь выполнять эти правила.
Ещё где-то может вылезти ограничение на максимальную длину пути - поэтому не стоит заханыривать проект слишком далеко...
Это всё так..перестраховочные правила дабы не было проблем....

Создайте проект заново без русского "проба" в пути и всё у вас будет хорошо. Это я проверил лично, создав такой-же проект как у Вас и получив в точности такую же ошибку )
Если где-то нужен пробел - используйте нижнее подчёркивание. "project_2" например.
Файл, где описана функция main(), стараюсь всегда называть main.c
Может быть и вам будет полезно/удобно...


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 19 2010, 02:07
Сообщение #82


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



заработало,вот немного исправленный код и результаты компиляции
CODE

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

#define CD4094_PORT PORTB
#define CD4094_DDR DDRB
#define CD4094_PIN_DATA 3
#define CD4094_PIN_CLK 2
#define CD4094_PIN_STB 4
#define OnBit(address,bit) (address|=(1<<bit))
#define OffBit(address,bit) (address&=~(1<<bit))

volatile uint8_t TH; //определение переменных

void CD4094_CLK(void){ //дёргаем ногу clk для проталкивания битов по регистру
OnBit(CD4094_PORT,CD4094_PIN_CLK);
delay_ms(2);
OffBit(CD4094_PORT,CD4094_PIN_CLK);
}

void CD4094_STB(void){ //дёргаем ногу stb для поджига светодиодов
OnBit(CD4094_PORT,CD4094_PIN_STB);
delay_ms(2);
OffBit(CD4094_PORT,CD4094_PIN_STB);
}

void Shift_Reg(void){ //загрузка сдвигового регистра
Shift_One_Byte(Led[0]);//загрузка байта в 1 регистр
Shift_One_Byte(Led[1]);//загрузка байта во 2 регистр
CD4094_STB(); //зажигаем светодиоды
}

void Shift_One_Byte(uint8_t tmp){ //загрузка одного байта
uint8_t i,dig;
i=8;
dig=Led[tmp];
while(i--){
if(dig&0x80){OnBit(CD4094_PORT,CD4094_PIN_DATA);}
else{OffBit(CD4094_PORT,CD4094_PIN_DATA);}
dig<<1;
CD4094_CLK();
}
}

uint16_t Analog(void){ //используем аналоговый компаратор для замера времени заряда кондёра
OffBit(DDRB,0); //переводим 0 выход порта В в третье состояние
OffBit(PORTB,0);
TCNT0=0; //очистим счётчик-накопитель
TH=0;
TCCR0=2; //включаем таймер0 с пределителем CLK/8
OnBit(DDRB,7); //включить транзистор
while(!(ACSR&(1<<5))); //ждём изменения состояния бита АСО на выходе компаратора
TCCR0=0; //выключаем таймер
OffBit(DDRB,7); //выключаем транзистор
OnBit(DDRB,0); //разряжаем кондёр
delay_ms(2); //время для разряда кондёра
return(TH<<8 | TCNT0); //возвращаем результат замера времени
}

ISR(TIMER0_OVF_vect){ //обработка прерывания таймера0 по переполнению
//при переполнении 8-битного счётчика таймера увеличивать байт ТН на 1
TH++;
}



void main(void){
// инициализация порта D
//PD1-2 выход,уровень 0
//PD4-6 вход,подтягивающие резисторы включены
PORTD=0x70; //установка битов порта D в 0 или 1
DDRD=0x06; //установка порта D на in или out
DDRB=0x1C; //установка stb,data,clk на выход,уровень 0


while(1){

if (PIND6==0){ //если кнопка S0(см.схему) нажата
OnBit(PORTD,2); //включить поворот (RUN)
OffBit(PORTD,1); //реверс не включать
} //цикл выполняется пока действительно условие
if (PIND4==0){ //если кнопка S2 нажата
OnBit(PORTD,2); //включить поворот
OnBit(PORTD,1); //включить реверс(REV)
}

}

}

Цитата
avr-gcc -mmcu=attiny2313 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=4000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT povorot1.o -MF dep/povorot1.o.d -c ../povorot1.c
../povorot1.c: In function 'CD4094_CLK':
../povorot1.c:19: warning: implicit declaration of function 'delay_ms'
../povorot1.c: In function 'Shift_Reg':
../povorot1.c:30: warning: implicit declaration of function 'Shift_One_Byte'
../povorot1.c:30: error: 'Led' undeclared (first use in this function)
../povorot1.c:30: error: (Each undeclared identifier is reported only once
../povorot1.c:30: error: for each function it appears in.)
../povorot1.c: At top level:
../povorot1.c:35: warning: conflicting types for 'Shift_One_Byte'
../povorot1.c:30: note: previous implicit declaration of 'Shift_One_Byte' was here
../povorot1.c: In function 'Shift_One_Byte':
../povorot1.c:38: error: 'Led' undeclared (first use in this function)
../povorot1.c:42: warning: statement with no effect
../povorot1.c: In function 'Analog':
../povorot1.c:52: error: 'TCCR0' undeclared (first use in this function)
../povorot1.c: At top level:
../povorot1.c:69: warning: return type of 'main' is not 'int'
make: *** [povorot1.o] Ошибка 1
Build failed with 5 errors and 5 warnings...

c:19-я не понял как мне задекларировать эту функцию?она же входит в util/delay.
с:30-ну тут более или менее понятно
с:35-что тут с типами не так?
с:38-понятно
с:42-эт почемуже?
с:52-я так понимаю в начале нужно сделать типа TCCR0=0x00?
с:69-так она ж вроде ничего не возвращает?

И вопрос по двоичному индикатору.достаточно будет возвращаемое функцией Analog() 16 битное число протолкнуть в 2 регистра паровозиком?
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 19 2010, 03:47
Сообщение #83


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



открыть delay.h и глянуть, что там _delay_ms() - религия не позволяет? )

Цитата
:30: warning: implicit declaration of function 'Shift_One_Byte'
тут надо чтобы функция Shift_One_Byte была либо объявлена(прототип функции) либо уже реализована ДО вызова. Чтобы компилятор мог знать как организовать вызов(какие параметры функция принемает и что возвращает).
А вот массив Led не объявлен вообще нигде sad.gif

:35 исчезнет как только добавите прототип или переместите реализацию Shift_One_Byte() выше её первого использования.

Цитата
:42-эт почемуже?
ну а результат куда? у вас в строке записано действие(сдвиг) но результат никуда не присваивается.
надо
dig<<=1;
или
dig = dig<<1; (для начинающего так более наглядно)

Цитата
с:52-я так понимаю в начале нужно сделать типа TCCR0=0x00?
нет. это называется инициализация, а у вас рагается на undeclared - т.е. вообще не определен.
Быстро пробежался по iotn2313.h и обнаружил там TCCR0A
За подробностями надо в даташит лезть... но думаю, что это он и есть. Просто разные компиляторы и немного разные обозначения. Где-то они для удобства как в даташите, а где-то хрен знает как называются ))

Цитата
:69-так она ж вроде ничего не возвращает?

Там, где есть куда возвращаться(типа "в операционку") - возврат из main таки передаёт значение "наверх", поэтому по стандарту main() должен возвращать int.
В данной ситуации можно не обращать внимания на это...


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 19 2010, 04:30
Сообщение #84


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(RW6MKA @ Dec 19 2010, 08:07) *
И вопрос по двоичному индикатору.достаточно будет возвращаемое функцией Analog() 16 битное число протолкнуть в 2 регистра паровозиком?

Да.
Хорошо, что заработало. Увидите, сколько там граблей...
По поводу delay_ms
Код
#define delay_ms(arg) _delay_ms(arg)

Я так думаю, что раз Вы то там, то сям пишете, лучше настраиваться на стандартное название.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 19 2010, 10:50
Сообщение #85


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Нет, он ни то там то сям - он теперь исключительно на avr-gcc пересел )))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 19 2010, 11:27
Сообщение #86


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Вот исправленный код
CODE


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

#define CD4094_PORT PORTB
#define CD4094_DDR DDRB
#define CD4094_PIN_DATA 3
#define CD4094_PIN_CLK 2
#define CD4094_PIN_STB 4
#define OnBit(address,bit) (address|=(1<<bit))
#define OffBit(address,bit) (address&=~(1<<bit))

//определение переменных
volatile uint8_t TH;
uint8_t Led[2];

//объявление прототипов функций
void CD4094_CLK(void);
void CD4094_STB(void);
void Shift_Reg(void);
void Shift_One_Byte(uint8_t tmp);
uint16_t Analog(void);



void main(void){
// инициализация порта D
//PD1-2 выход,уровень 0
//PD4-6 вход,подтягивающие резисторы включены
PORTD=0x70; //установка битов порта D в 0 или 1
DDRD=0x06; //установка порта D на in или out
DDRB=0x1C; //установка stb,data,clk на выход,уровень 0


while(1){

if (PIND6==0){ //если кнопка S0(см.схему) нажата
OnBit(PORTD,2); //включить поворот (RUN)
OffBit(PORTD,1); //реверс не включать
} //цикл выполняется пока действительно условие
if (PIND4==0){ //если кнопка S2 нажата
OnBit(PORTD,2); //включить поворот
OnBit(PORTD,1); //включить реверс(REV)
}

}

}


void CD4094_CLK(void){ //дёргаем ногу clk для проталкивания битов по регистру
OnBit(CD4094_PORT,CD4094_PIN_CLK);
_delay_ms(2);
OffBit(CD4094_PORT,CD4094_PIN_CLK);
}

void CD4094_STB(void){ //дёргаем ногу stb для поджига светодиодов
OnBit(CD4094_PORT,CD4094_PIN_STB);
_delay_ms(2);
OffBit(CD4094_PORT,CD4094_PIN_STB);
}

void Shift_Reg(void){ //загрузка сдвигового регистра
Shift_One_Byte(Led[0]);//загрузка байта в 1 регистр
Shift_One_Byte(Led[1]);//загрузка байта во 2 регистр
CD4094_STB(); //зажигаем светодиоды
}

void Shift_One_Byte(uint8_t tmp){ //загрузка одного байта
uint8_t i,dig;
i=8;
dig=Led[tmp];
while(i--){
if(dig&0x80){OnBit(CD4094_PORT,CD4094_PIN_DATA);}
else{OffBit(CD4094_PORT,CD4094_PIN_DATA);}
dig=dig<<1;
CD4094_CLK();
}
}

uint16_t Analog(void){ //используем аналоговый компаратор для замера времени заряда кондёра
OffBit(DDRB,0); //переводим 0 выход порта В в третье состояние
OffBit(PORTB,0);
TCNT0=0; //очистим счётчик-накопитель
TH=0;
TCCR0A=2; //включаем таймер0 с пределителем CLK/8
OnBit(DDRB,7); //включить транзистор
while(!(ACSR&(1<<5))); //ждём изменения состояния бита АСО на выходе компаратора
TCCR0A=0; //выключаем таймер
OffBit(DDRB,7); //выключаем транзистор
OnBit(DDRB,0); //разряжаем кондёр
_delay_ms(2); //время для разряда кондёра
return(TH<<8 | TCNT0); //возвращаем результат замера времени
}

ISR(TIMER0_OVF_vect){ //обработка прерывания таймера0 по переполнению
//при переполнении 8-битного счётчика таймера увеличивать байт ТН на 1
TH++;
}


Компил ругается только на main() laughing.gif
Подскажите как теперь правильно реализовать чтение датчика и индикацию?Во время цикла проверки нажатия кнопок или можно после опроса кнопок?
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 19 2010, 13:50
Сообщение #87


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



А вот теперь вам надо крепко подумать и реализовать всё по человечески, шаг за шагом... мне этот код не нравится и, ясное дело, тот факт, что он компилится - ещё ниичего не означает ))

Начинать надо не с заморочками с датчиком а с прикидывания общей структуры программы... с планирования надо начинать в общем...

Пока рекомендую Вам начать с самого малого - сделайте бегущий огонек на светодиодах подключенных прямо к портам.... и сделайте так, чтобы это заработало в протеусе. А там видно будет... надо потихонечку действовать, постепенно ))) начнем вот с легко отлаживаемого кода пока, я думаю..

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


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 19 2010, 14:11
Сообщение #88


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Вот с помощью этого кода пытался узнать тики.К выходам регистров подключены светодиоды.Чтото не фурычит.Что не так?
CODE

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

#define CD4094_PORT PORTB
#define CD4094_DDR DDRB
#define CD4094_PIN_DATA 3
#define CD4094_PIN_CLK 2
#define CD4094_PIN_STB 4
#define OnBit(address,bit) (address|=(1<<bit))
#define OffBit(address,bit) (address&=~(1<<bit))

//объявление прототипов функций
void CD4094_init(void);
void CD4094_CLK(void);
void CD4094_STB(void);
void Shift_Reg(void);
void Shift_One_Byte(uint16_t dig);
uint16_t Analog(void);

//определение переменных
volatile uint8_t TH;
uint16_t tik;


void main(void){

while(1){
sei();
tik=Analog();
CD4094_init();
Shift_Reg();
}
}



void CD4094_init(void){ //инициализация регистров
uint16_t i;
for(i=0;i<16;i++){OffBit(CD4094_PORT,CD4094_PIN_DATA) ; CD4094_CLK(); }
}

void CD4094_CLK(void){ //дёргаем ногу clk для проталкивания битов по регистру
OnBit(CD4094_PORT,CD4094_PIN_CLK);
OffBit(CD4094_PORT,CD4094_PIN_CLK);
}

void CD4094_STB(void){ //дёргаем ногу stb для поджига светодиодов
OnBit(CD4094_PORT,CD4094_PIN_STB);
OffBit(CD4094_PORT,CD4094_PIN_STB);
}

void Shift_Reg(void){ //загрузка сдвигового регистра
Shift_One_Byte(tik);//загрузка 2 байтов в регистр
CD4094_STB(); //зажигаем светодиоды
}

void Shift_One_Byte(uint16_t tik){ //загрузка одного байта
uint16_t i=16;
uint16_t dig=tik;
while(i--){
if(dig&0x8000){OnBit(CD4094_PORT,CD4094_PIN_DATA);}
else{OffBit(CD4094_PORT,CD4094_PIN_DATA);}
dig<<=1;
CD4094_CLK();
}
}

uint16_t Analog(void){ //используем аналоговый компаратор для замера времени заряда кондёра
OffBit(DDRB,0); //переводим 0 выход порта В в третье состояние
OffBit(PORTB,0);
TCNT0=0; //очистим счётчик-накопитель
TH=0;
TCCR0A=2; //включаем таймер0 с пределителем CLK/8
OnBit(DDRB,7); //включить транзистор
while(!(ACSR&(1<<ACO))); //ждём изменения состояния бита АСО на выходе компаратора
TCCR0A=0; //выключаем таймер
OffBit(DDRB,7); //выключаем транзистор
OnBit(DDRB,0); //разряжаем кондёр
_delay_ms(2); //время для разряда кондёра
return(TH<<8 | TCNT0); //возвращаем результат замера времени
}

ISR(TIMER0_OVF_vect){ //обработка прерывания таймера0 по переполнению
//при переполнении 8-битного счётчика таймера увеличивать байт ТН на 1
TH++;
}

Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 19 2010, 14:43
Сообщение #89


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Поймите вы меня, мил человек, я вам помогаю, но я не хочу делать за вас всю работу.
Тем более, что я ощущаю у вас некоторое нежелание реально разбираться и работать... ну сяду я сейчас и что я буду делать? А то-же, что и вы должны сделать, чтобы понять что не так: буду сначала думать что нужно было бы сделать(какие сигналы куда зачем и с какими задержками) и как оно реально получается тут у вас......
Цепляйте там у себя в протеусе пробники на каждую ногу - смотрите форму сигналов...думайте соответствует ли она требуемой... отлаживайте! ) всё для этого у вас есть. )

Не хотите вы своей головой думать. Вставляете чужой говнокод в проект. Копируете чужие косяки - дело Ваше ))

Я предлагаю начать с малого. Освоиться заодно и с протеусом...проверить, может он ваще мышей не ловит или тачка у вас слабая и там всё жутко тормозит... потом подумать и шаг за шагом реализовать свои функции для работы с регистрами вашими..
Так оно и помогать то будет приятней, когда человек разбирается, а не чужой говнокод правит )


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 19 2010, 14:51
Сообщение #90


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Да мне всего и нужно сказать в проге косяк или в схеме чтоб знать где рыть то.
Go to the top of the page
 
+Quote Post

21 страниц V  « < 4 5 6 7 8 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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