Страница 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
так вот....много текста я уже вынес из флеши в еепрому...
но есть ещё туева хуча конструкций типа

Код: Выделить всё

printf("#%.2i:", NumCounter);
вот как бы эту строку

Код: Выделить всё

"#%.2i:"
тоже вынести в еепрому? причём так чтоб назад считать было бы не затратно по коду....

ну и аналогичный вопрос
есть функция

Код: Выделить всё

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 тоже надо куда-то подключать и писать код для работы с ним.
Мой совет - возьмите контроллер покруче и не мучайтесь.