Вт ноя 15, 2011 20:06:02
*Trigger* писал(а):Надо глянуть, что в библиотеке.
/*
CodeVisionAVR C Compiler
(C) 1998-2007 Pavel Haiduc, HP InfoTech S.R.L.
BCD conversion functions
*/
#pragma asm_function+
unsigned char bcd2bin(unsigned char n)
{
#asm
ld r30,y
swap r30
andi r30,0xf
mov r26,r30
lsl r26
lsl r26
add r30,r26
lsl r30
ld r26,y+
andi r26,0xf
add r30,r26
ret
#endasm
}
unsigned char bin2bcd(unsigned char n)
{
#asm
ld r26,y+
clr r30
bin2bcd0:
subi r26,10
brmi bin2bcd1
subi r30,-16
rjmp bin2bcd0
bin2bcd1:
subi r26,-10
add r30,r26
ret
#endasm
}
#pragma asm_function-
Чт ноя 17, 2011 21:03:48
Вт окт 23, 2012 11:14:24
Волосатый писал(а):Возможно и виснет шина. Просмотрел код с приведенной ссылки, там везде где ждем установки бита готовности шины, там стоит тупой while что не есть хорошо. Если этот бит не будет установлен, программа так и будет там висеть. Но. Замирание индикации (правильно я вас понял, что на динамике начинает гореть только один индикатор?) можно объяснить только тем что этот while у вас висит в прерывании, и прерывание индикации по таймеру не срабатывает. Как этого избежать, добавить во все while цикл for со счетчиком и по совпадению делать оператор brake, что выкинет из последнего while. Но потом скорее всего придется переинициализировать шину.
Вт окт 23, 2012 12:26:55
crazzian писал(а):А как можно исправить чтобы не через WHILE при работе с шиной?
void IRQ_TWI(void){
switch(TWSR){ // Стадия работы TWI.
case 0x40: // Адрес прошел. Пришла квитанция.
case ... и тд
Вт окт 23, 2012 17:22:30
crazzian писал(а):А как можно исправить чтобы не через WHILE при работе с шиной?
Вт окт 23, 2012 23:40:53
while (!(TWCR & (1<<TWINT)))
k++;
if (k==1000)
return;
if (tmp==0xff){
twi_stop();
return 0; }
Ср окт 24, 2012 08:03:44
Ср окт 24, 2012 12:27:21
Ср окт 24, 2012 15:22:59
phanis писал(а):Выводы шины (SDA, SCL) подтянуты к + питания через резисторы 5-10к? Может скорость шины высокая. Там ни схемы ни исходного кода.
Ср окт 24, 2012 17:53:10
не мало. Вроде уже как вам советовали с питанием поработатькондер 0.1 мкф,
Pika4u писал(а):Хм, а если попробовать поставить перед LM кондер этак на 4000 мкФ и после KM-на 100нФ?
pyzhman писал(а):Для начала тыкнуть осциллом на шину питания +5в. Порой там такое творится!
Ср окт 24, 2012 17:55:11
Чт окт 25, 2012 07:47:47
Apparatchik писал(а):Нужно ждать ответа не в цикле, а писать что то типа такого. Также как вариант удобно использовать сторожевой таймер если зависоны не частые, то зброс почти не заметен.
Вт дек 04, 2012 21:01:24
Вт дек 04, 2012 21:19:57
Вт дек 04, 2012 21:32:26
ibiza11 писал(а):(почти TWI, но не совсем)
Вт дек 04, 2012 22:26:26
это уже вопрос "чем отличается TWI от i2c?" тут в даташит AVR и стандарт i2c Вас отсылаю.а можно вот сдесь чуток разяснить поглубже ?
Странный вопрос. А что мешает аппаратному модулю работать "независимо" от основной проги, в случае подключения Сишных файлов?)))) Сам факт подключения файлов мешает?))))) Вы хоть посмотрели, что в этих файлах?))))я заметил что и в одном и во втором случае мы подключаем библиотеки где есть сишные файлы
Вт дек 04, 2012 22:44:17
да почему же он странный, вполне логичный.ibiza11 писал(а):Странный вопрос.
ibiza11 писал(а):Вы хоть посмотрели, что в этих файлах?))))
Вт дек 04, 2012 23:29:25
Вы думаете в аппартном модуле сидят маленькие гномики-телепаты, которые определяют что именно в данный момент нужно сделать?вот для меня и непонятка как это аппаратный может использовать програмный код, когда он должен быть жостко реализован на железе
Не хамите.надеюсь ясно изложился ?
Ср дек 05, 2012 20:07:15
FreshMan писал(а):в моем понимании аппаратный это как, например, реализован таймер Т0 в Atmege8
мы же там не подключаем никаких сишных файлов......, мы просто его конфигурируем и все.....,
Ср дек 05, 2012 20:14:47
но ведь таймер не юзает всякие сишные файлы, он не использует функции типа старт, стоп....., мы его рас сконфигурировали и он ПАШЕТApparatchik писал(а): но таймер не перестает быть аппаратным!