как такое возможно?!Demon писал(а):Не совсем подходит т.к. одну и туже библиотеку пользуют несколько МК одновременно
CodeVision AVR в вопросах и ответах
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Так кто мешает определять контроллер в main.c, а проверку оставить в библиотеке?
Ставим плюсы: )
-
Demon
- Нашел транзистор. Понюхал.
- Сообщения: 164
- Зарегистрирован: Сб янв 20, 2007 20:44:33
- Откуда: Из закаулков вашей души
Re: CodeVision AVR в вопросах и ответах
Не совсем удачно выразился, имелось в виду что одну и ту же библиотеку использую в нескольких параллельных проектах.ARV писал(а):как такое возможно?!Demon писал(а):Не совсем подходит т.к. одну и туже библиотеку пользуют несколько МК одновременно
-
Demon
- Нашел транзистор. Понюхал.
- Сообщения: 164
- Зарегистрирован: Сб янв 20, 2007 20:44:33
- Откуда: Из закаулков вашей души
Re: CodeVision AVR в вопросах и ответах
Вчера вечером так и пытался сделать, но ничего не получалось - выходила ошибка "неизвестный" TxSize. С утра сообразил, что сначала надо объявить #define c типом МК, а затем только include подключать требуемую библиотеку.ibiza11 писал(а):Так кто мешает определять контроллер в main.c, а проверку оставить в библиотеке?
Спасибо за консультацию все заработало.
Re: CodeVision AVR в вопросах и ответах
UCSRA |= (1<<TXC);
printf("%с",UCSRA);
я принимаю в терминале 0x60 (0b01100000), т.е. флаг установлен хотя я в него записал 1?
Мне это надо выяснить поскольку надо по завершению передачи выключать передатчик RS485.
Вот такой код например:
case CmnWritePrefTmr:
if(CmndSymb[0]==Adres1){ //zashita ot sluchainoi zapisi wsex esli komanda pridet с 100m adresom
EETimeTmr1=((unsigned long int)CmndSymb[2])*845;
TimeTmr1=EETimeTmr1;
UCSRA |= (1<<TXC);//sbros flaga txc
Rs485SendEN=1;
printf("NewTimeTmr1=%lu /845",TimeTmr1);
while(!(UCSRA & (1<<TXC)));
Rs485SendEN=0;
};
break;
МК принимает все отлично а в терминале получаю 09.04.2014 16:55:14.00 [RX] - NewTimeTmr2=845 /8ÿ.
И так везде. Только
UCSRA |= (1<<TXC);//sbros flaga txc
Rs485SendEN=1;
putsf("1");
while(!(UCSRA & (1<<TXC)));
Rs485SendEN=0;
работает отлично.
- Реклама
Re: CodeVision AVR в вопросах и ответах
1 - флаг установленWasily писал(а): я принимаю в терминале 0x60 (0b01100000), т.е. флаг установлен хотя я в него записал 1?
....
UCSRA |= (1<<TXC);//sbros flaga txc
...
UCSRA |= (1<<TXC);//sbros flaga txc
....
0 - флаг сброшен
Re: CodeVision AVR в вопросах и ответах
Не совсем понял, что вы хотели этим сказать.
Для сброса флага нужно в него записать 1 согласно даташиту.
Для сброса флага нужно в него записать 1 согласно даташиту.
Re: CodeVision AVR в вопросах и ответах
и как вынести функцию в другой файл?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Скопировать функцию в буфер обмена, вставить текст в другой файл, удалить копируемый текст из первого файлакак вынести функцию в другой файл?
Re: CodeVision AVR в вопросах и ответах
Да, а как его обозвать и правильно include?
Пробовал и .h и .c и все ругается.
Пробовал и .h и .c и все ругается.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
уж сколько раз твердили миру... а воз и ныне там.Wasily писал(а):Да, а как его обозвать и правильно include?
Пробовал и .h и .c и все ругается.
в .h файлы выносятся макроопределения и прототипы функций, определения типов и описания вешних (или глобальных) переменных. в этих файлах по-хорошему не должно быть никаких реализаций функций!!!
в .c файлы вставяются #include со всеми .h файлами, необходимыми для всех функций, которые реализуются или используются в этом модуле. здесь же определяются все переменные.
.c файлы должны компилироваться, т.е. дожны быть включены в проект.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
Т.е. если я правильно понял то отдельно функцию которая будет вызываться из main неполучится?
я в main пишу
#include <stdio.h>
#include <mega8.h>
#include <delay.h>
и #include "readRx.c"
readRx.c добавляю в проект, там функция обработчик которая получает и передает в main. Но не выходит.
2) Вы как главный эксперт подскажите по главной проблеме с
UCSRA |= (1<<TXC);
printf("%с",UCSRA);
и ниже
я в main пишу
#include <stdio.h>
#include <mega8.h>
#include <delay.h>
и #include "readRx.c"
readRx.c добавляю в проект, там функция обработчик которая получает и передает в main. Но не выходит.
2) Вы как главный эксперт подскажите по главной проблеме с
UCSRA |= (1<<TXC);
printf("%с",UCSRA);
и ниже
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
я даже разволновался: может, я пишу не по-русски? перечитал - вроде нет...
итак, разжевываю:
1. ваш проект состоит из 2 модулей main.c и readrx.c
2. оба этих файла вы добавили в проект
3. чтобы функции readrx.c были доступны в main.c вы обязаны создать readrx.h, в котором описать прототип вашей функции - не знаю, какая там она у вас.
4. в main.c вы пишите #include "readrx.h"
5. компилируете
повторяю: никакого инклюдирования сишных файлов быть не должно!!!!!!!!
итак, разжевываю:
1. ваш проект состоит из 2 модулей main.c и readrx.c
2. оба этих файла вы добавили в проект
3. чтобы функции readrx.c были доступны в main.c вы обязаны создать readrx.h, в котором описать прототип вашей функции - не знаю, какая там она у вас.
4. в main.c вы пишите #include "readrx.h"
5. компилируете
повторяю: никакого инклюдирования сишных файлов быть не должно!!!!!!!!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
Вот теперь понятно! огромное спасибо.
Еще подскажите по флагам TXC плз
Еще подскажите по флагам TXC плз
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
я не понял вашей проблемы.Wasily писал(а):Еще подскажите по флагам TXC плз
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: CodeVision AVR в вопросах и ответах
Не сбрасывается флаг у него http://radiokot.ru/forum/viewtopic.php? ... 7#p1980627ARV писал(а):я не понял вашей проблемы.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
"не сбрасывается флаг" - это фигня непонятная. я вижу, что он выводит (неужели в USART?!) содержимое регистра и при этом он ждет, что в этом регистре не будет флага?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
попробуйте так:Wasily писал(а):Коты, подскажите почему когда я пишу
UCSRA |= (1<<TXC);
printf("%с",UCSRA);
я принимаю в терминале 0x60 (0b01100000), т.е. флаг установлен хотя я в него записал 1?
Код: Выделить всё
uint8_t tmp;
...
UCSRA |= (1<<TXC);
tmp = UCSRA;
printf("%с",tmp); Ставим плюсы: )
Re: CodeVision AVR в вопросах и ответах
И так я делал, только переменная была temp.ARV писал(а):uint8_t tmp;
...
UCSRA |= (1<<TXC);
tmp = UCSRA;
printf("%с",tmp);
После чип erase c флагами стало все ок!
Сейчас провел эксперимент очередной:
Если запустить такой код после reset (запускается после нажатии кнопки однократно):
Rs485SendEN=1;
printf("%c",UCSRA);
delay_us(550);
Rs485SendEN=0;
Получаем в первый раз 11.04.2014 09:58:25.68 [RX] - 0х20 что и должно быть!
После второго раза получаем 0х60 что тоже отлично, т.к. флаг не сбрасывался!
Но, как только убираю delay и ставлю while(!(UCSRA & (1<<TXC)));
приходит FF, т.е. передатчик раньше отключается до завершения передачи.
Если посылать длинную посылку то не приходят 2 последних символа.
В чем ошибка?
Последний раз редактировалось Wasily Пт апр 11, 2014 06:38:57, всего редактировалось 5 раз.
Re: CodeVision AVR в вопросах и ответах
Да в USART через ADM485.ARV писал(а):"не сбрасывается флаг" - это фигня непонятная. я вижу, что он выводит (неужели в USART?!) содержимое регистра и при этом он ждет, что в этом регистре не будет флага?!
А в чем я ошибаюсь так уж сильно
Флаг TXC должен устанавливаться толко после того как последний байт вышел из UDR и нет новых на входе.


