Страница 125 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 29, 2011 20:31:55
Ратмир
SubDia писал(а):Ратмир писал(а):Светодиод вообще не мигает, а на оциле такая воть хрень при 0,05V/дел без нагрузки, не работает прога.
Зато нулевая нога порта дергается почему-то (пока что переключите светодиод на PORTD.0 - увидите мигание). Жаль, у меня сейчас времени нет разбираться, только ночью засяду. =)
сделал как вы сказали все ОК!!! Вот это мозг!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 29, 2011 20:42:42
SubDia
Ратмир писал(а):SubDia писал(а):
Зато нулевая нога порта дергается почему-то (пока что переключите светодиод на PORTD.0 - увидите мигание). Жаль, у меня сейчас времени нет разбираться, только ночью засяду. =)
сделал как вы сказали все ОК!!! Вот это мозг!
А теперь поменяйте в двух строках управления портом "PORTD.1" на "1", и у Вас замигает и первый вывод - PORTD.1 (или на "2", и будет дергаться второй). В общем, использование имени ноги порта не прокатывает.

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 29, 2011 20:58:15
Ратмир
Изменил порт ни хрена только на PD0 мигает
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 29, 2011 20:59:32
Сериг
Сериг писал(а):а вы включили делэй функцию в начале?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 29, 2011 21:07:28
Ратмир
delay.h вроде да, а #include не достаточно для включения?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 29, 2011 21:24:02
Сериг
Сериг писал(а):Сериг писал(а):Ребят,просьба помогите часы сделать мне надо на семисегментниках с общим анодом! ,не у кого не будет прошики в CVAVR ??? оч нужно.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 29, 2011 21:26:25
Ратмир
меняю delay на 25 милисек никакого эффекта с PD0 стабильный сигнал, с других Х...й
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт апр 29, 2011 22:30:11
SubDia
Ратмир писал(а):Изменил порт ни хрена только на PD0 мигает
Дык я же говорил писать не "_BV(PORTD.1)", а "_BV(1)". Вы не то написали.
Получается так: командой "PORTD |= _BV(1)" мы накладываем маску 0b00000010 на порт (а там у нас 0). В итоге на PORTD.1 появляется высокий уровень. Дальше мы выполняем команду побитного И значения PORTD (в данный момент 0b00000010) с инвертированным значением маски (а это - число 0b11111101). В результате этой операции у нас получится так, что там, где были в маске нули, в значении PORTD биты обнулятся независимо от того, какие числа там стояли (а все прочее останется неизменным). В итоге второй бит PORTD обнулится в соответствии с накладываемой маской.
Этот вариант работает.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб апр 30, 2011 03:29:39
Ратмир
Сериг писал(а):Сериг писал(а):
Ниже на форуме есть тема: часы, таймер,будильник на жк и сегментных индикаторах
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб апр 30, 2011 04:38:26
Ратмир
SubDia писал(а):Ратмир писал(а):Изменил порт ни хрена только на PD0 мигает
Дык я же говорил писать не "_BV(PORTD.1)", а "_BV(1)". Вы не то написали.
Получается так: командой "PORTD |= _BV(1)" мы накладываем маску 0b00000010 на порт (а там у нас 0). В итоге на PORTD.1 появляется высокий уровень. Дальше мы выполняем команду побитного И значения PORTD (в данный момент 0b00000010) с инвертированным значением маски (а это - число 0b11111101). В результате этой операции у нас получится так, что там, где были в маске нули, в значении PORTD биты обнулятся независимо от того, какие числа там стояли (а все прочее останется неизменным). В итоге второй бит PORTD обнулится в соответствии с накладываемой маской.
Этот вариант работает.
Все порядок, все работает. Теперь поиграюсь с портами
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт май 05, 2011 13:14:21
chinga
извините, вот наткнулся на такую прогу, и никак не могу переделать под CVAVR, поможете?
выставляю код
Код: Выделить всё
#define F_CPU 8000000
#define bit_test(data,bitno) (data & (1 << bitno))
#include <mega8.h>
#include <delay.h>
#include <interrupt.h>
#define _BV(x) (1<<(x))
void answer();
/*
ISR(USART_RXC_vect)
{
switch(UDR)
{
case '1': PORTB=0; break;
case '2': PORTB=0xFF; break;
case '3': answer(); break;
default: break;
}
} */
void UART_snt(char*text)
{
for(unsigned char i=0;text[i]!=0;i++)
{
while(1)
if((UCSRA & (1<<UDRE))==1<<UDRE)
break;
UDR=text[i];
}
}
void UART_snt_byte(unsigned char text)
{
while(1)
if((UCSRA & (1<<UDRE))==1<<UDRE)
break;
UDR=text;
}
void ascii_print(char*text, unsigned char nom,unsigned char funk)
{
unsigned char buf1, buf2, buf3;
unsigned char i=0;
buf1=nom/100;
if(buf1!=0) text[i++]=buf1+48;
buf2=nom/10-buf1*10;
if(buf1!=0 || buf2!=0) text[i++]=buf2+48;
buf3=nom-buf1*100-buf2*10;
text[i++]=buf3+48;
if(funk==1) text[i++]='\0';
}
/*unsigned char ascii_scan(char*text, unsigned char positions)
{
}*/
void answer()
{
PORTB=0b11111110;
for(unsigned char j=1;j<=200;j++)
{
char text[4];
ascii_print(text, j, 1);
UART_snt(text);
UART_snt_byte(32);
}
PORTB=0b11111110;
PORTB=0b01111111;
_delay_ms(1000);
PORTB=0b11111111;
}
void UART_init(void)
{
#define XTAL 8000000L
#define baudrate 9600L
#define bauddivider (XTAL/(16*baudrate)-1)
#define HI(x) ((x)>>8)
#define LO(x) ((x)& 0xFF)
UBRRL = LO(bauddivider);
UBRRH = HI(bauddivider);
UCSRA = 0;
UCSRB = 1<<RXEN|1<<TXEN|1<<RXCIE|0<<TXCIE;
UCSRC = 1<<URSEL|1<<UCSZ0|1<<UCSZ1;
}
int main(void)
{
DDRB=0xFF;
PORTB=0xFF;
DDRA=0;
PORTA=0xFF;
UART_init();
sei();
UART_snt("ATMega start..\r\n\0");
while(1)
{
if(PINA!=0xFF)
{
char buf=PINA;
_delay_ms(150);
if(buf!=PINA) buf=PINA;
switch(buf)
{
case 0b11111110: UART_snt("0 button\r\n\0"); break;
case 0b11111101: UART_snt("1 button\r\n\0"); break;
case 0b11111011: UART_snt("2 button\r\n\0"); break;
case 0b11110111: UART_snt("3 button\r\n\0"); break;
case 0b11101111: UART_snt("4 button\r\n\0"); break;
case 0b11011111: UART_snt("5 button\r\n\0"); break;
case 0b10111111: UART_snt("6 button\r\n\0"); break;
case 0b01111111: UART_snt("7 button\r\n\0"); break;
case 0b11111100: UART_snt("Hi Sergey!\r\n\0"); break;
case 0b11110011: PORTB=0; break;
case 0b11001111: PORTB=0xFF; break;
case 0b00111111: UART_snt("\f\0"); break;
default: break;
}
_delay_ms(150);
}
}
return 0;
}
это юарт)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт май 05, 2011 13:22:52
ARV
chinga писал(а):это юарт)
это тихий ужас!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт май 05, 2011 13:27:29
hd44780
На хрен (извиняюсь) Вам её переделывать?
CvAVR имеет генератор начального кода, воспользуйтесь им. Генерит нормальный код, который не нужно переделывать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт май 05, 2011 13:37:37
chinga
что нужно изменить для этого?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт май 05, 2011 19:26:56
Ратмир
наверное новый проект начать

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт май 06, 2011 15:28:01
clawham
Здравствуйте снова Товарищи судари...
постала предо мной непостижимая задача...
пишу свой ваттметр...катастрофически не хватает памяти...
много текстов и менюшек..а мега 8
так вот....много текста я уже вынес из флеши в еепрому...
но есть ещё туева хуча конструкций типа
вот как бы эту строку
тоже вынести в еепрому? причём так чтоб назад считать было бы не затратно по коду....
ну и аналогичный вопрос
есть функция
Код: Выделить всё
void FP(char* text)
{
...
puts(text);
...
}
я её хочу вызывать с параметром
Код: Выделить всё
void FP_eep(eeprom char* text)
{
... // какие то преобразования типов и...
FP(text1); // но техт1 это уже указатель на строку в оперативке
}
вот как такие преобразования делать-то? чтоб и еепромину можно было передавать и флешевую..и внешнееепроминную...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт май 06, 2011 15:40:16
avreal
Если катастрофически не хватает памяти, то в первую очередь нужно отказаться от printf.
При том, что я сам его люблю и при первой же возможности прикручиваю...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт май 06, 2011 15:42:59
clawham
ну я как видите итак юзаю только лонги а мне лонги и надо выводить...с точным значением колличества выводимых символов-пробелов или нулей
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт май 06, 2011 15:48:50
clawham
да и скажем так...текстам как раз и место во внешней микросхеме еепрома ибо это гибкость и возможность поменять язык не лазия в прошивку
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт май 06, 2011 18:06:58
hd44780
clawham писал(а):пишу свой ваттметр...катастрофически не хватает памяти...
много текстов и менюшек..а мега 8
Я предвидел это .... И изначально взял Mega16.
Ненамного дороже, зато теперь нет проблем ни с printf, ни с плавающей точкой (ну люблю я её

), ни с какой-то лишней периферией, если понадобится.
Зато теперь и кнопки, и индикатор, и режим калибровки и плавающая точка. И флэшки ещё 40% свободно - пиши что хочешь.
А с 8 мегой одни проблемы - то памяти мало, то ног не хватает. Кварц не поставишь, ибо он от порта B ноги отбирает

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