CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

я не знаю размеров мелодий...я их генерирую прогой она даёт массив...потом я сначала или сконца подрезаю незначащую тишину и просто закидываю в программу...

sizeof это не трата машинных циклов ... оно на этапе компиляции в число превращается....

пока решил сделать вот так

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

flash unsigned int size[] = {sizeof(muz1), sizeof(muz2), sizeof(muz3), sizeof(muz4),sizeof(muz5),  
                             sizeof(muz6), sizeof(muz8), sizeof(muz9), sizeof(muz10), sizeof(muz11)};
но как-то это бредом кажется...когда уже есть массив указателей на каждый из этих массивов...

кол-во звуков-то тож будет меняться...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Я не про sizeof, а про подпрограмму подсчета, но ваш тоже вариант аналогичен моему предложению с размером в нулевом адресе.(смотрим отредактированную версию).
можно не заморачиваться в принципе на размере, а выполнять, пока в ячейке не ноль.Все равно каждый массив нолем завершается.Главное чтобы в мелодии ноля не было.Можно его единицей менять,на слух не слышно будет.
А то прервется в середине где-нибудь :))
В поисках истины человек развивается.
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

Странное дело....вродебы безразмерные массивы - не проблема
вроде бы и массив ссылок на безразмерные массивы не проблема...но функции получения размера нету :))) есть компиляторная сизеоф но она о указателях не знает.....жесть....
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Добрый вечер... Подскажите пожалуйста, как реализовать Power-down Mode в CVAVR на ATMEGA8... Не могу найти примеров кода с описанием. Ткните пожалуйста в ссылку с примером, и подробностями выхода из этого режима....
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

как то так, наверное?

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

#define SM0 4
#define SE 7
// Power down
MCUCR = (2<<SM0)|(1<<SE);
asm("sleep"); 
Подробности выхода в Шите смотреть
Просыпается по ИНТ0,ИНТ1(только прерывание по уровню написано3. Only level interrupt INT1 and INT0.) и по совпадению адреса TWI.
В поисках истины человек развивается.
Контактная информация:
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

Подключаете sleep.h и вызываете нужную функцию, смотрите справку по sleep.h
«И всё-таки она вертится!»
Реклама
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Спасибо)... попробуем :)
Родился
Сообщения: 3
Зарегистрирован: Пт июн 29, 2012 12:12:30

Сообщение eu8cc1 »

Помогите разобраться, не работает в железе. По ходу виснет контроллер.
в протеусе все работает. Уже менял микруху но ничего не помогает. В железе на жк не выводится текст. Если не использую функцию eep_write(0x01,0x01); то выводиться текст

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

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Professional
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : 
Version : 
Date    : 29.06.2012
Author  : user
Company : home
Comments: 


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>
#include <delay.h>
// I2C Bus functions




//#asm
//   .equ __i2c_port=0x15 ;PORTB
//   .equ __sda_bit=3
//   .equ __scl_bit=2
//#endasm
#include <i2c.h>

#define EEPROM_BUS_ADDRESS 0xa0

// Alphanumeric LCD functions
#include <alcd.h>

// Declare your global variables here

/***************************************************************************************
+ Читаем ячейку из 24с02.
+ В параметрах указывается адрес читаемой ячейки.
+ Функция возвращает прочитаное из ячейки.
****************************************************************************************/
unsigned char eep_read(unsigned char address) {
unsigned char data;                    //переменная для прочитаных данных
i2c_start();                           //посылаем команду "старт" в шину i2c
i2c_write(EEPROM_BUS_ADDRESS);         //посылаем в шину адрес устройства
i2c_write(address);                    //посылаем в шину адрес читаемой ячейки
i2c_start();                           //снова посылаем "старт" в шину
i2c_write(EEPROM_BUS_ADDRESS | 1);     //незнаю зачем но без этого не работает
data=i2c_read(0);                      //принимаем данные с лини и сохраняем в переменную
i2c_stop();                            //посылаем команду "стоп"
return data;                           //возврощаем значение прочитаного
}

/***************************************************************************************
+ Запись данных в ячейку 24с02.
+ В параметрах указывается адрес записываемой ячейки (adress).
+ Также указуем в параметрах данные которые надо записать в ячейку.
****************************************************************************************/
void eep_write(unsigned char address, unsigned char data) {   
i2c_start();                           //посылаем команду "старт" в шину i2c
i2c_write(EEPROM_BUS_ADDRESS);         //посылаем в шину адрес устройства
i2c_write(address);                    //посылаем в шину адрес записываемой ячейки
i2c_write(data);                       //посылаем данные для записи
i2c_stop();                            //посылаем команду "стоп"
}






void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// I2C Bus initialization
// I2C Port: PORTC
// I2C SDA bit: 3
// I2C SCL bit: 2
// Bit Rate: 100 kHz
// Note: I2C settings are specified in the
// Project|Configure|C Compiler|Libraries|I2C menu.
i2c_init();

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters/line: 16
lcd_init(16);


eep_write(0x01,0x01);

lcd_putsf("gggggggggggg");
while (1)
      {
      
      // Place your code here

      }
}

Вложения
проекты2eeprom.rar
(131.77 КБ) 152 скачивания
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

вложение научились делать - это неплохо.
Осталось научиться не тупо копировать весь текст из редактора,а убирать хотя бы незначащие элементы типа

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

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00
итак понятно,что они по нулям при старте.

это так,на будущее.

а теперь по существу.
я так понял,что вы используете внешнюю память еепром так?
неплохо было бы узнать что за модель.А лучше еще и даташит на нее, не нам же его искать, тем более, что он предположительно у вас есть.
В поисках истины человек развивается.
Контактная информация:
Родился
Сообщения: 3
Зарегистрирован: Пт июн 29, 2012 12:12:30

Сообщение eu8cc1 »

Использую Atmel835 24c04
Вложения
проекты2eeprom3.rar
(232.74 КБ) 172 скачивания
Atmel_24c04.pdf
(620.84 КБ) 308 скачиваний
Родился
Сообщения: 4
Зарегистрирован: Пт дек 02, 2011 21:45:23

Сообщение vovan128 »

Garin писал(а):Зраствуйте, скажите как корректно сделать функцию отображения температуры без sprintf
вот например проект

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

/*****************************************************
                       
Chip type           : ATmega8
Program type        : Application
Clock frequency     : 4,000000 MHz
*****************************************************/              
#include <mega8.h>                                       // библиотека ввода\вывода микроконтроллера
#asm
   .equ __w1_port=0x18 ;PORTB                       // сообщаем куда подключен датчик
   .equ __w1_bit=0
#endasm
#include <1wire.h>                                         // библиотека работы с 1Wire
#include <ds18b20.h>                                 // библиотека для работы с датчиком ds18b20
#asm
   .equ __lcd_port=0x12 ;PORTD                      // сообщаем куда подключён экран
#endasm
#include <lcd.h>                                    // библиотека для LCD
#include <delay.h>                                  // библиотека задержки
#include <stdio.h>                                  // стандартная библиотека вывода символов на экран 
unsigned char devices;                              // переменная в которой количество присоеденённых датчиков
int temp;                                           // переменная для хранения температуры   
unsigned char lcd_buffer[16];  
void main(void)                                     // Declare your global variables here
{       

ACSR=0x80;                                          // Analog Comparator: Off
lcd_init(16);                                       // инициилизация LCD, и говорим что он на 16 символов
devices=w1_init();                                  // ищим датчики
while(devices>0)                                    // бесконечный цикл, если датчик подключон
      {
          temp=ds18b20_temperature(0);              // читаем температуру  
          if (temp>1000){                           // если датчик выдаёт больше 1000
             temp=4096-temp;                        // отнимаем от данных 4096
             temp=-temp;                            // и ставим знак "минус"
          }
     sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1);// записуем в масив показания на экран 
          lcd_clear();                              // чистим дисплей перед выводом
          lcd_puts(lcd_buffer);                     // выводим масив на LCD
          delay_ms(500);                            // ждём 500мс
      };
}  
но хотелось бы сделать функцию вывода на ЖКИ вот , так

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

                  lcd_gotoxy(0,0);
                           lcd_putsf("t="); 
                          lcd_putchar(temp/10+0x30);
                          lcd_putchar(temp%10+0x30); 
                           lcd_putchar('.'); 
                          lcd_putchar('0');
                          lcd_putsf("\xdfC"); 
Естественно мой второй вариант показывает только половину показаний.
В аттачменте пример использования itoa() вместо sprintf.
Вложения
itoa.c.txt
В аттачменте пример использования itoa.
(446 байт) 164 скачивания
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

Garin писал(а):как корректно сделать функцию отображения температуры без sprintf
с помощью таблицы - при этом легко вывести даже "дробную часть", работая лишь с целыми числами
Держит паяльник хвостом
Аватара пользователя
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Сообщение java »

Здравствуйте, подскажите чайнику, можно ли готовую написанную прошивку поправить в CodeVision AVR, или это делается в текстовом редакторе, а потом заново компилировать?
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Че за вопрос? У вас вообще CVAVR установлен?
Между прочим даже в нем есть хоть и примитивная, но подсветка синтаксиса.
Никаким внешним редактором не нужно, если проект для CVAVR.
Если вы имеете ввиду сам файл .hex то нужно перевести его в асм, и CV тут не помощник.
Студия 4 без лишних хлопот переводит в асм, но разбираться долго в регистрах
Есть нормальная программка REAVR называется там хотя бы регистры по даташиту можно обозвать читаемо.
И будет понятно что к чему.Но опять же ограничение - нужно знать какой кристалл.

Мы- не знаем :dont_know:
В поисках истины человек развивается.
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Сообщение java »

это я спросил наверное по чайниковски :))
У меня есть файл main, вот так он открывается в CVAVR (см рисунок), а также его прошивка и файл в протеусе, мне это всё сделал один очень хороший человек, это светофор, но теперь мне срочно нужно добавить один "глаз" и изменить время, я почемуто решил что у меня получится, но почемуто ничего не стирается и не исправляется, вобщем не реагирует , хотя курсор переставляется.
Вложения
3.JPG
(135.27 КБ) 293 скачивания
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Вам же там в заголовке латинскими буквами написано - Read only. Создайте нормальный проект и будет вам счастье. Желательно избегать кириллицы и длинных имен в названии папок и имен файлов.
Docendo discimus
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Сообщение java »

Ну понятно, мне не разобраться самому :cry:
Я просто нажал на файлик, он открылся в CodeVision AVR , а что там в заголовке, это уже не для моих познаний.
Спасибо.
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

В таком разе выкладывайте сюда ваш zip. Может кто-то и распакует.
Docendo discimus
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Сообщение java »

нате :))
Это рабочая, уже пол года стоит на дороге.
Сейчас мне нужно подкорректировать, добавить пешеходнику жёлтый, и изменить время, я попытался это сделать в текстовом редакторе, но накасячил наверняка, вот посмотрите.
Вложения
123.txt
(2.22 КБ) 258 скачиваний
sfetofor1.zip
(61.31 КБ) 153 скачивания
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

1.хм проект то для студии, не для код вижна.придется если в ней делать векторы прерываний переписывать.
и возможно некоторые макросы добавлять, которых в ней нет.

2.можно вообще сделать универсальный проект светофора.и потом при необходимости добавлять нужные секции.так же если добавить в проект юарт или юсби или инфракрасный порт, то можно будет менять временные задержки без снятия платы или без перепрошивки.
В поисках истины человек развивается.
Контактная информация:
Ответить

Вернуться в «AVR»