Страница 117 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн фев 28, 2011 18:03:26
Сериг
ребят,кто может сказать в какой программе написанно это:
http://www.getchip.net/posts/059-isprav ... it-doctor/
?я просто кроме cva ни че ни знаю но собрать оч надо!может кто поможет?)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн фев 28, 2011 18:09:13
*Trigger*
там в конце статьи есть файл *.HEX, он откроется любой программой. Откройте его и прошейте! Или нужно посмотреть исходник?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн фев 28, 2011 21:44:31
Сериг
*Trigger* писал(а):Или нужно посмотреть исходник?
если не сложно)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 01, 2011 11:16:19
FredyInKR
Добрый день.
Динамическую индикацию сделал по прерыванию таймера без особых затруднений все хорошо работает... Далее пытаюсь сам разобраться с 1wire... Все статьи перечитал, но немогу понять где у меня клин. То ли компилятор, то ли протеус.
Для проверки, просто написал небольшую программу которая определяет датчик и зажигает светодиоды. Подключил виртуальный осциллограф в Протеусе на 1wire. у меня короткий импульс который должен определить наличие датчика... Но он не определяет.

Я 4часа просидел с этой ерундой. Не могу найти причину... Подскажите где, я "туплю"???
Код: Выделить всё
#include <tiny13.h>
#include <delay.h>
#asm
.equ __w1_port=0x18 ;PORTB
.equ __w1_bit=5
#endasm
#include <1wire.h>
#include <ds18b20.h>
unsigned char devices; //храню тут найденные устройства 1wire
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
if(devices>0){PORTB=0b000111;} else
if(devices<=0){PORTB=0b000101;}
}
void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTB=0x00;
DDRB=0xFF;
// Clock value: 18,750 kHz
TCCR0A=0x00;
TCCR0B=0x04;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
GIMSK=0x00;
MCUCR=0x00;
TIMSK0=0x04;
ACSR=0x80;
ADCSRB=0x00;
#asm("sei") //глобальные прерывания
while (1)
{
#asm("cli"); //выкл. прерывания
devices=w1_init(); //ищу датчик...
delay_ms(50); //далее задержка
#asm("sei"); //включаю прерывания
};
}
Проверил, если отключить таймер и прерывания результат тоже 0 на шине 1wire. Хотя протеус работает нормально. Порт настроен верно. Далее пытаюсь найти косяк в самом code vision. Может и правда, что-то с компилятором не так???
Опрашиваю 1wire через таймер с задержкой... (не знаю, че-то рисунок не прилепился...)
Вот какие у меня импульсы...

Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 01, 2011 11:34:37
Сериг
купите книгу по cvavr . я вчера в озоне купил очень рад!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 01, 2011 12:41:54
FredyInKR
Хороший совет

Книга у меня есть, но проблема этим не решится.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 01, 2011 14:12:23
ChipKiller
FredyInKR писал(а):Далее пытаюсь найти косяк в самом code vision. Может и правда, что-то с компилятором не так???
... косяк, скорее всего, в логике работы программы -
w1_init(); //ищу датчик... возвращает 1-есть ответ, 0- нет.В чем проблема и зачем вы "долбите" прерываниями??? В папке
examples есть готовые примеры. Подставьте в Протеус код оттуда - все должно работать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 01, 2011 14:28:08
Сериг
страница 283 .
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 01, 2011 15:05:23
FredyInKR
ChipKiller писал(а):В чем проблема и зачем вы "долбите" прерываниями??? В папке examples есть готовые примеры. Подставьте в Протеус код оттуда - все должно работать.
Долблю потому, что в другой программе должны будут использоваться прерывания.... Это я так для примера. Тут задача стоит не в оптимизации программы, а том, чтобы найти подключенный датчик... Считать с него то я уже разберусь. Ступор у меня то на этом шаге?...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 01, 2011 15:47:24
ValBag
FredyInKR
Вообще-то, РВ5 у ATtiny13 - RESET.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 01, 2011 16:12:12
FredyInKR
Ну и что? Я же не собираюсь прошивать тини13 в реале. И на 4порту и 3-м вешал... Результат девайсов = 0.
...
странно... Хотя процесс 1w_read и 1w_write возвращают = 1. т.е. запись/чтение успешны.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 01, 2011 17:05:15
ChipKiller
FredyInKR писал(а):Тут задача стоит не в оптимизации программы, а том, чтобы найти подключенный датчик...
.. про оптимизацию не говорил ни слова, просто советую Вам отключить в программе все "лишние примочки", которые не относятся в данный момент к работе датчика.
FredyInKR писал(а):странно... Хотя процесс 1w_read и 1w_write возвращают = 1. т.е. запись/чтение успешны.
... так что проблема не в компиляторе.....
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 01, 2011 17:27:44
FredyInKR
Все лишнее выключил, я же говорю, что все равно 0. Протеус вроде нормально работает, я скачивал готовые проекты с использованием 1wire все отображается.
кому не трудно, посмотрите пожалуйста архив с проектом код вижена и протеуса?!...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср мар 02, 2011 10:09:26
Ardarik
как hex добавить в проект чет ни как не найду
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср мар 02, 2011 10:30:35
FredyInKR
2 клика на МК в Протеусе далее строка в свойствах Program file: открыть и поехали.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср мар 02, 2011 14:09:51
ValBag
FredyInKR писал(а):посмотрите пожалуйста архив с проектом код вижена и протеуса?!...
В протеусе, в свойствах МК, поставьте частоту такую же, как в исходном тексте - 4.8 MHz. А CKDIV8 в "1". Всё работает.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср мар 02, 2011 14:54:52
FredyInKR
Спасибо огромное!

Туплю на ровном месте =))))
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 05, 2011 11:16:59
Thauris
помогите пожалуйста с 74hc595!
написал такой код:
Код: Выделить всё
#define DATA 2
#define CLK 1
#define STROBE 0
#define DATA_H PORTB|=1<<DATA
#define DATA_L PORTB&=~(1<<DATA)
#define CLK_H PORTB|=1<<CLK
#define CLK_L PORTB&=~(1<<CLK)
#define STROBE_H PORTB|=1<<STROBE
#define STROBE_L PORTB&=~(1<<STROBE)
void hc595(unsigned char tmp)
{
unsigned char i=0;
DDRB|=(1<<DATA)|(1<<CLK)|(1<<STROBE);
for(i=8;i;i--)
{
if(tmp&0x80) {DATA_H;}
else {DATA_L;};
CLK_H;
tmp<<=1;
CLK_L;
};
STROBE_H;
STROBE_L;
hc595(11111111);
}
а протэус выдает на экране бред
подскажите, что я делаю не так
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 05, 2011 11:46:54
ChipKiller
Thauris писал(а):подскажите, что я делаю не так
... вызов
hc595(11111111); должен происходить в
main, а не внутри определения самой
hc595(){....}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 05, 2011 11:50:04
ARV
ChipKiller писал(а):Thauris писал(а):подскажите, что я делаю не так
... вызов
hc595(11111111); должен происходить в
main, а не внутри определения самой
hc595(){....}
да и хрен бы с ним, с вызовом - пока стек не переполнится, что-то все же успеет вывестись в регистр... а вот пытаться выдать число больше
11 миллионов этой функцией - чистый бред.