Страница 211 из 421

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

Добавлено: Чт июн 21, 2012 09:01:29
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)};
но как-то это бредом кажется...когда уже есть массив указателей на каждый из этих массивов...

кол-во звуков-то тож будет меняться...

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

Добавлено: Чт июн 21, 2012 11:04:45
vitalik_1984
Я не про sizeof, а про подпрограмму подсчета, но ваш тоже вариант аналогичен моему предложению с размером в нулевом адресе.(смотрим отредактированную версию).
можно не заморачиваться в принципе на размере, а выполнять, пока в ячейке не ноль.Все равно каждый массив нолем завершается.Главное чтобы в мелодии ноля не было.Можно его единицей менять,на слух не слышно будет.
А то прервется в середине где-нибудь :))

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

Добавлено: Чт июн 21, 2012 11:13:47
clawham
Странное дело....вродебы безразмерные массивы - не проблема
вроде бы и массив ссылок на безразмерные массивы не проблема...но функции получения размера нету :))) есть компиляторная сизеоф но она о указателях не знает.....жесть....

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

Добавлено: Вт июн 26, 2012 21:35:21
isx
Добрый вечер... Подскажите пожалуйста, как реализовать Power-down Mode в CVAVR на ATMEGA8... Не могу найти примеров кода с описанием. Ткните пожалуйста в ссылку с примером, и подробностями выхода из этого режима....

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

Добавлено: Вт июн 26, 2012 23:52:54
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.

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

Добавлено: Вт июн 26, 2012 23:56:23
Apparatchik
Подключаете sleep.h и вызываете нужную функцию, смотрите справку по sleep.h

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

Добавлено: Ср июн 27, 2012 07:55:16
isx
Спасибо)... попробуем :)

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

Добавлено: Пт июн 29, 2012 12:23:11
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

      }
}


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

Добавлено: Пт июн 29, 2012 13:48:44
vitalik_1984
вложение научились делать - это неплохо.
Осталось научиться не тупо копировать весь текст из редактора,а убирать хотя бы незначащие элементы типа

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

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

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

а теперь по существу.
я так понял,что вы используете внешнюю память еепром так?
неплохо было бы узнать что за модель.А лучше еще и даташит на нее, не нам же его искать, тем более, что он предположительно у вас есть.

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

Добавлено: Пт июн 29, 2012 14:41:25
eu8cc1
Использую Atmel835 24c04

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

Добавлено: Вт июл 03, 2012 16:12:26
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.

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

Добавлено: Вт июл 03, 2012 17:45:20
ChipKiller
Garin писал(а):как корректно сделать функцию отображения температуры без sprintf
с помощью таблицы - при этом легко вывести даже "дробную часть", работая лишь с целыми числами

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

Добавлено: Пн июл 09, 2012 20:25:56
java
Здравствуйте, подскажите чайнику, можно ли готовую написанную прошивку поправить в CodeVision AVR, или это делается в текстовом редакторе, а потом заново компилировать?

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

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

Мы- не знаем :dont_know:

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

Добавлено: Пн июл 09, 2012 21:52:54
java
это я спросил наверное по чайниковски :))
У меня есть файл main, вот так он открывается в CVAVR (см рисунок), а также его прошивка и файл в протеусе, мне это всё сделал один очень хороший человек, это светофор, но теперь мне срочно нужно добавить один "глаз" и изменить время, я почемуто решил что у меня получится, но почемуто ничего не стирается и не исправляется, вобщем не реагирует , хотя курсор переставляется.

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

Добавлено: Пн июл 09, 2012 22:18:51
pyzhman
Вам же там в заголовке латинскими буквами написано - Read only. Создайте нормальный проект и будет вам счастье. Желательно избегать кириллицы и длинных имен в названии папок и имен файлов.

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

Добавлено: Пн июл 09, 2012 22:26:58
java
Ну понятно, мне не разобраться самому :cry:
Я просто нажал на файлик, он открылся в CodeVision AVR , а что там в заголовке, это уже не для моих познаний.
Спасибо.

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

Добавлено: Пн июл 09, 2012 22:29:07
pyzhman
В таком разе выкладывайте сюда ваш zip. Может кто-то и распакует.

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

Добавлено: Пн июл 09, 2012 22:54:43
java
нате :))
Это рабочая, уже пол года стоит на дороге.
Сейчас мне нужно подкорректировать, добавить пешеходнику жёлтый, и изменить время, я попытался это сделать в текстовом редакторе, но накасячил наверняка, вот посмотрите.

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

Добавлено: Вт июл 10, 2012 11:26:25
vitalik_1984
1.хм проект то для студии, не для код вижна.придется если в ней делать векторы прерываний переписывать.
и возможно некоторые макросы добавлять, которых в ней нет.

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