Лыжи таки оказались неправильные..))) Заменил проц - все заработало... Спасибо..ARV писал(а):и вправду, чертовщина у вас какая-то... пригласите попа с кадилом, пусть освятит вашу лабораторию, ибо я вот только что в студии просимулировал этот код (только поменял PORTA на PORTB, т.к. у меня заточено на atmega8) - работает, ё! как и было обещано. так что это у вас лыжи неправильные
WinAvr в вопросах и ответах
Re: WinAvr в вопросах и ответах
- Реклама
Re: WinAvr в вопросах и ответах
А писали что на Паскале работал ?
PROTEUS используйте.
PROTEUS используйте.
Будете проходить мимо- проходите!
- shootnikS
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Ср янв 05, 2011 17:51:35
- Откуда: Пенза
Re: WinAvr в вопросах и ответах
Как правильно работать с массивами в WinAVR?
При "0" на пятой линии порта D из T0 вызывается функция temp, которая должна изменить номер и значение элемента массива на 1. Значения массива step должны выводится в порт С.
Сие действие не получается. Почему??
ЗЫ Не смотрите на смысловую нагрузку, ее нет, мне важен сам принцип, почему не изменяется номер и значение массива step?
Код: Выделить всё
#define F_CPU 3686400UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned char step[2];
unsigned int i;
void temp(){
i++;
step[i]++;}
ISR(TIMER0_OVF_vect){
if(!(PIND & (1<<PIND5))){
temp();
}
TCNT0=0x00;
};
int main(void)
{
TIMSK=(0<<TOIE0);
TCCR0=(0<<CS00)|(0<<CS01)|(1<<CS02);
DDRD = 0x0F;
PORTD|=_BV(PD5);
PORTC=0x70;
DDRC=0x0F;
sei();
while (1) {
PORTC=step[0];
_delay_ms(1);
PORTC=step[1];
_delay_ms(1);
}; } Сие действие не получается. Почему??
ЗЫ Не смотрите на смысловую нагрузку, ее нет, мне важен сам принцип, почему не изменяется номер и значение массива step?
Последний раз редактировалось shootnikS Вс янв 09, 2011 10:28:00, всего редактировалось 1 раз.
Re: WinAvr в вопросах и ответах
winavr наверно тоже не видит смысловой нагрузки и оптимизирует жестко.
может повторяемое на каждой страничке этого топика слово-модификатор volatile поможет ?
может повторяемое на каждой страничке этого топика слово-модификатор volatile поможет ?
Будете проходить мимо- проходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
ну и алгоритмик 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- shootnikS
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Ср янв 05, 2011 17:51:35
- Откуда: Пенза
Re: WinAvr в вопросах и ответах
не нравится?
volatile действительно помог
можно пару ссылочек для изучения WinAVR и его особенностей, только начал))
Смотрим в эту тему))
http://radiokot.ru/forum/viewtopic.php?f=20&t=40373
volatile действительно помог
можно пару ссылочек для изучения WinAVR и его особенностей, только начал))
Смотрим в эту тему))
http://radiokot.ru/forum/viewtopic.php?f=20&t=40373
Re: WinAvr в вопросах и ответах
Спасибо! Дело в том я так начинал, но меня смущали всё теже чёрточки в протеусе.ARV писал(а):вот как-то так.
А вот обязательно перед компиляцией производить процедуру "Make Clean"
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
не обязательно, но желательно.
очистку надо производить только в том случе, если произошло значительное изменение проекта, например, поменялись коренным образом 2 из 12 файлов проекта. в этом случае студия может "забыть" о том, что надо пересобрать все файлы, и проект будет ошибочным. в общем, студия иной раз коники выкидывает, тут не поспоришь. поэтому если вы собрали проект, который работать должен, а он не работает - начните с Make Clean и только потом выискивайте ошибки.
очистку надо производить только в том случе, если произошло значительное изменение проекта, например, поменялись коренным образом 2 из 12 файлов проекта. в этом случае студия может "забыть" о том, что надо пересобрать все файлы, и проект будет ошибочным. в общем, студия иной раз коники выкидывает, тут не поспоришь. поэтому если вы собрали проект, который работать должен, а он не работает - начните с Make Clean и только потом выискивайте ошибки.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: WinAvr в вопросах и ответах
Спасибо. Вот функцию обязательно объявлять.ARV писал(а):не обязательно, но желательно.
Новерно, не обязательно так как я не объявляю, и не чего страшного не происходит.
Спасибо.
Последний раз редактировалось TICLIR Вс янв 09, 2011 17:38:35, всего редактировалось 1 раз.
- shootnikS
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Ср янв 05, 2011 17:51:35
- Откуда: Пенза
Re: WinAvr в вопросах и ответах
Столкнулся с такой банальной на первый взгляд проблемой, как разложить, например число 1567 в массив а={1,5,6,7}. За помощь буду очень признателен. Естественно на WinAVR
- shootnikS
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Ср янв 05, 2011 17:51:35
- Откуда: Пенза
Re: WinAvr в вопросах и ответах
Код: Выделить всё
int buffer[3];
int num=123;
itoa(num,buffer,10);Помогите с алгоритмом: имеется a={1,2,3,4,9,9,9,9} Нужно организовать обратный отсчет второй половины массива по действию, т.е.:
Код: Выделить всё
a={1,2,3,4,9,9,9,9}
PORTA|=_BV(PA0);
PORTA&=~_BV(PA0);
a={1,2,3,4,9,9,9,8}
PORTA|=_BV(PA0);
PORTA&=~_BV(PA0);
a={1,2,3,4,9,9,9,7}
.........
a={1,2,3,4,0,0,0,0}Код: Выделить всё
temp=a[4]*1000+a[5]*100+a[6]*10+a[7];
temp--;
itoa(temp,array,10);Re: WinAvr в вопросах и ответах
Подскажите, как сделать массив указателей на биты регистра? Требуется провернуть что-то типа a[0] = 1 где a[0] был бы PORTx PDy.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
itoa запишет в массив СИМВОЛЫ десятичного числа, чтобы получить ЦИФРЫ надо потом из всех НЕНУЛЕВЫХ элементов массива ВЫЧЕСТЬ символ '0' - получите желаемое.
понятия БИТ в языке Си не существует: минимальная адресуемая единица данных - БАЙТ, поэтому сделать массив битов НЕВОЗМОЖНО. в С++ есть средства, которые позволяют сделать ПОЧТИ ТО, ЧТО ХОЧЕТСЯ, но во-первых, чтобы понять КАК это делается - надо иметь голову с крайне редкими мозгами, а во-вторых, это все равно будет не МАССИВ.
понятия БИТ в языке Си не существует: минимальная адресуемая единица данных - БАЙТ, поэтому сделать массив битов НЕВОЗМОЖНО. в С++ есть средства, которые позволяют сделать ПОЧТИ ТО, ЧТО ХОЧЕТСЯ, но во-первых, чтобы понять КАК это делается - надо иметь голову с крайне редкими мозгами, а во-вторых, это все равно будет не МАССИВ.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: WinAvr в вопросах и ответах
Вас понял, сделаю ч\з структуру.
- shootnikS
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Ср янв 05, 2011 17:51:35
- Откуда: Пенза
Re: WinAvr в вопросах и ответах
так? или может проще:
помогите пожалуйста с этим обратным отсчетом, весь проект встал((
Код: Выделить всё
for (int i=0; i<8; i++)
{
if(a[i]>0){a[i]=a[i]-'0';}
}- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
все так, но не забудьте про размер буфера и предварительный вызов itoa() ну и для проверки я бы просто использовал if(a)shootnikS писал(а):так? или может проще:помогите пожалуйста с этим обратным отсчетом, весь проект встал((Код: Выделить всё
for (int i=0; i<8; i++) { if(a[i]>0){a[i]=a[i]-'0';} }
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: WinAvr в вопросах и ответах
для экономии памяти, для a вместо int лучше использовать char, но размер массива надо делать на один больше чем нужно для строкового представления числа (нуль-символ). это там, на всякий случай.
- shootnikS
- Первый раз сказал Мяу!
- Сообщения: 21
- Зарегистрирован: Ср янв 05, 2011 17:51:35
- Откуда: Пенза
Re: WinAvr в вопросах и ответах
Товарищи, помогайте:
не получается сделать обратный отсчет с помощью itoa();
PD5,PD6,PD7 кнопки управления индикаторами. (>>, up, down)
По нажатию PD4 должен организовываться обратный отсчет на нижнем индикаторе (9999, 9998, 9997 и т.д.)
В реальности показывает какую-то чушь((
Выкладываю проект в Proteus v.7.7 sp2 и исходник в WinAVR.
не получается сделать обратный отсчет с помощью itoa();
PD5,PD6,PD7 кнопки управления индикаторами. (>>, up, down)
По нажатию PD4 должен организовываться обратный отсчет на нижнем индикаторе (9999, 9998, 9997 и т.д.)
В реальности показывает какую-то чушь((
Выкладываю проект в Proteus v.7.7 sp2 и исходник в WinAVR.
- Вложения
-
- проект.rar
- В Proteus пропишите путь к hex-файлу
- (53.96 КБ) 241 скачивание


