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

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
Ну понятно, мне не разобраться самому
Я просто нажал на файлик, он открылся в 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.можно вообще сделать универсальный проект светофора.и потом при необходимости добавлять нужные секции.так же если добавить в проект юарт или юсби или инфракрасный порт, то можно будет менять временные задержки без снятия платы или без перепрошивки.