AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
28.01.2013, 12:57
|
#31
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Помогите найти ошибку AVR asm
Понятно.
А если датчик отвалился и заменить его?
Проще, наверное, на столе с каждого адрес считать командой Read ROM,
а затем их просто прописать в EEPROM.
Зачем в в приборе подпрограмма определения адресов - она ж мертвым грузом будет лежать, после определения и прописывании адресов.
|
|
|
|
28.01.2013, 13:10
|
#32
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Помогите найти ошибку AVR asm
Сообщение от Boba_spb
|
А если датчик отвалился и заменить его?
|
Просто подключается датчик с новым ID и старые сбрасываются и он записывается первым. Уже сам подумал, что неудобно сделал - для замены понадобится 2 датчика и лишний цикл переинициализации. Надо просто сделать сброс старых адресов, а на следующем цикле уже записывать - ну это просто.
Сообщение от Boba_spb
|
Зачем в в приборе подпрограмма определения адресов - она ж мертвым грузом будет лежать, после определения и прописывании адресов.
|
Ну байт 50 оно занимает, ну пусть 100. Ну и фиг с ним. Счаз всё, ещё не домученное под 2 кило скомпилированного коду, правда с отладочной индикацией и ещё кой-какой мелочёвкой.
Последний раз редактировалось omercury; 28.01.2013 в 13:13.
|
|
|
|
28.01.2013, 13:36
|
#33
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Помогите найти ошибку AVR asm
Ну если 2 кило, то тогда разговор ни о чем.
|
|
|
|
28.01.2013, 13:53
|
#34
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Помогите найти ошибку AVR asm
Сообщение от Boba_spb
|
ни о чем.
|
Ну, типа, да.
Вчера, пока болтали, целых 4 байта уже соптимизировал...
|
|
|
|
28.01.2013, 14:05
|
#35
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Помогите найти ошибку AVR asm
Если память длинная и скорострельность устраивает - не тратьте время время зря. Красота программы - вторична, главное что б все работало.
Сделал и забыл.
|
|
|
|
28.01.2013, 14:17
|
#36
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Помогите найти ошибку AVR asm
Весь смысл как раз в том, чтоб оно не сильно отвлекало от основной работы - оттуда и объём получается.
Сообщение от Boba_spb
|
Красота программы - вторична, главное что б все работало.
Сделал и забыл.
|
Это не мой хлеб, такшта всё наоборот.
|
|
|
|
28.01.2013, 17:25
|
#37
|
Частый гость
Регистрация: 01.09.2006
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Помогите найти ошибку AVR asm
/*
author YSA
date 08.03.07
AVR
master Microline
delay taimer0
freq = 7372800 Hz
lengh slot = 70 us
full reset = 630 us
*/
#include ‹avr/io.h›
#include ‹stdio.h›
#include ‹avr/delay.h›
#include "Microline.h"
unsigned char MicrolineCheck(void)
{
unsigned char uc_l_MicrlineCheck;
in_Microline;
while (!pin_Microline); //check line +5V
out_Microline; //if V = 0 V while
TCCR0 = 3; // 7372800/64 = 8,68 us
TCNT0 = 255 - 80; //overflow 80 - 694 us
TIFR = 1 ‹‹ TOV0; // clear TOV0
PORTD=out0_Microline; //0V = 651 us
while (!(TIFR & (1 ‹‹ TOV0))); //wait set TOV0
in_Microline; //Microline = in
TCNT0 = 255 - 7;
TIFR = 1 ‹‹ TOV0;
while (!(TIFR & (1 ‹‹ TOV0)));
if(pin_Microline) uc_l_MicrlineCheck = 0; //check line +5V
else uc_l_MicrlineCheck = 1;
TCNT0 = 255 - 35;
TIFR = 1 ‹‹ TOV0;
while (!(TIFR & (1 ‹‹ TOV0)));
return uc_l_MicrlineCheck;
}
void MicrolineWriteByte(unsigned char uc_l_MicrolineTxByte)
{
unsigned char uc_l_MicrolineCountBit;
while(!pin_Microline);
out_Microline;
TCCR0=2; // 7372800/8 = 1,085 us
for(uc_l_MicrolineCountBit=0; uc_l_MicrolineCountBit!=8; uc_l_MicrolineCountBit++)
{
out0_Microline; //time lets begin transmit SLOT
TCNT0 = 255 - 1; //7372800/8 1 us = 1 takt
TIFR = 1 ‹‹ TOV0; //clear TOV0
while(!(TIFR & (1 ‹‹ TOV0)));
TIFR = 1 ‹‹ TOV0; //clear TOV0
TCNT0 = 255 - 60; //7372800/8 delay 60 us = 60 takt
ML_port = (uc_l_MicrolineTxByte & 1) ‹‹ number_ML_port; //sdvig in port
uc_l_MicrolineTxByte = uc_l_MicrolineTxByte ›› 1;
while(!(TIFR & (1 ‹‹ TOV0)));
out1_Microline;
TCNT0 = 255 - 1;
TIFR = 1 ‹‹ TOV0;
while(!(TIFR & (1 ‹‹ TOV0)));
}
in_Microline;
TCNT0 = 255 - 105;
TIFR = 1 ‹‹ TOV0;
while(!(TIFR & (1 ‹‹ TOV0)));
out_Microline;
}
unsigned char MicrolineReadByte(void)
{
unsigned char uc_l_MicrolineRxByte;
unsigned char uc_l_MicrolineCountBit;
unsigned char uc_l_MicrolineRxByteTemp;
while(!pin_Microline);
uc_l_MicrolineRxByte = 0;
TCCR0 = 2; // 7372800/8 = 1,085 us
for(uc_l_MicrolineCountBit = 0; uc_l_MicrolineCountBit != 8; uc_l_MicrolineCountBit++)
{
out_Microline;
out0_Microline;
TIFR = 1 ‹‹ TOV0;
TCNT0 = 255 - 1; // 7372800/8 delay 1 us = 1 takt
while(!(TIFR & (1 ‹‹ TOV0))); //time between bits
TCNT0 = 255 - 5; //wait 10 us
TIFR = 1 ‹‹ TOV0;
in_Microline; //Microline = IN
while(!(TIFR & (1 ‹‹ TOV0)));
TCNT0 = 255 - 50; //wait 55 us
TIFR = 1 ‹‹ TOV0; //read bit
uc_l_MicrolineRxByteTemp = (pin_Microline) ›› number_ML_port;
uc_l_MicrolineRxByte = (uc_l_MicrolineRxByteTemp ‹‹ uc_l_MicrolineCountBit) | uc_l_MicrolineRxByte;
while(!(TIFR & (1 ‹‹ TOV0)));
}
TCNT0 = 255 - 60;
TIFR = 1 ‹‹ TOV0;
while(!(TIFR & (1 ‹‹ TOV0)));
out_Microline;
return uc_l_MicrolineRxByte;
}
void main(void)
{
//static unsigned char uc_l_drob;
//static unsigned char uc_l_celoe;
static unsigned char ucm_l_MoutData[11];
unsigned char uc_l_count;
static unsigned char uc_l_outString[12];
while(1)
{
MicrolineCheck();
MicrolineWriteByte(0x33);
for(uc_l_count=0;uc_l_count!=10;uc_l_count++)
ucm_l_MoutData[uc_l_count]=MicrolineReadByte();
// lcd_clear();
// DelayMs(50);
}
}
Вот это реально рабочий код
|
|
|
|
28.01.2013, 18:12
|
#38
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Помогите найти ошибку AVR asm
Сообщение от Serg1977
|
void main(void)
|
Оба-на.
Началось.
|
|
|
|
28.01.2013, 19:54
|
#39
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Помогите найти ошибку AVR asm
Пора объявить конкурс на самую замысловатую работающую программу с DS18B20, и DS18S20.
Еще через UART есть работающие.
|
|
|
|
28.01.2013, 20:39
|
#40
|
Почётный гражданин KAZUS.RU
Регистрация: 09.12.2007
Адрес: Новосибирск
Сообщений: 1,021
Сказал спасибо: 10
Сказали Спасибо 70 раз(а) в 63 сообщении(ях)
|
Re: Помогите найти ошибку AVR asm
sibiryak983
есть у радиодеда хорошо расписанная на asm программа,
с комментариями,
посмотрите.
__________________
И на камнях растут деревья!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:40.
|
|