Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.04.2008, 09:47
|
|
Прохожий
Регистрация: 06.06.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Помогите портировать имитатор DS1990
Фсем доброе время суток!
Помогите пожалуйста портировать исходник на С от имитатора DS1990. Исходник для ПИКа а нужно для AtMega8 под WinAVR.
Код:
|
#include ‹htc.h›
#include "delay.h"
void StartWork( void );
__CONFIG( UNPROTECT & BORDIS & MCLRDIS & PWRTDIS & WDTDIS & INTIO);
unsigned char IOBYTE;
unsigned char OWSF;
unsigned char OWBITCOUNT; //bit count
unsigned char BITMASK;
unsigned char IBKEY[] = { 0xDC, 0x00, 0x00, 0x0D, 0xA4, 0x1D, 0xC3, 0x01 };
#define OWSF_READY 1
#define OWDIR TRIS2
#define OWDATA GPIO2
void interrupt iocf( void ){
if(INTF == 1){
DelayUs( 250 );
if(OWDATA == 0){
OWSF = OWSF_READY;
di();
INTE = 0;
}
INTF = 0;
}
}
void
main(void)
{
TRISIO = 0x0C; // 001100
GPIO = 0x00;
DelayUs( 100 );
di();
INTE = 1; //enable interrupt on gpio2
INTEDG = 0; //on falling
ei();
while (1){
asm( "sleep" );
if( OWSF == OWSF_READY ){
StartWork();
di();
OWSF = 0;
INTE = 1;
INTEDG = 0;
ei();
}
}
}
void StartWork( void ){
while( OWDATA == 0 );
DelayUs( 30 );
OWDIR = 0x00; // as out
OWDATA = 0x00; // present pulse
DelayUs( 120 );
OWDIR = 0x01; //as input and hiz
while( OWDATA == 0 ) ;
// read 8 bit's from master
OWBITCOUNT = 8;
while(OWBITCOUNT--){
while( OWDATA );
DelayUs( 30 );
IOBYTE = IOBYTE››1;
if(OWDATA){
IOBYTE = IOBYTE | 0x80;
}
else
while( OWDATA == 0) ;
}
if( IOBYTE != 0x33){
return;
}
OWBITCOUNT = 8;
while(OWBITCOUNT --){
IOBYTE = IBKEY[OWBITCOUNT];
BITMASK = 8;
while( BITMASK-- ){
while( OWDATA ); //wait synhro fall
if((IOBYTE & 0x01) == 0){
OWDIR = 0x00; //as out
OWDATA = 0; //pull down bus
DelayUs( 50 );
OWDIR = 0x01; //hiz
while( OWDATA == 0 ) ; //wait then bus goup
}
IOBYTE = IOBYTE ›› 1;
DelayUs( 50 );
}
}
} |
Если можно то с комментариями - где чего( всёж хочу разобраться)
Заранее благодарен !
ЗЫЖ Нога на AtMega8 - INT0
|
|
|
|
08.05.2008, 10:30
|
|
Прохожий
Регистрация: 06.06.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Ещё раз подниму тему.
Ну помогите пожалуйста!
Я АВР только начал пробовать, а тут под ПИК, а приблуду эту очень сделать надо...
Плиииз !!!
|
|
|
|
08.05.2008, 15:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Ничего сложного,это хайтек,тебе нужен сам алгорит этой программы? могу описать,но ни разу не работал с DS1990,это ключ?
|
|
|
|
12.05.2008, 05:27
|
|
Прохожий
Регистрация: 06.06.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Да, дс1990-"ключ" тачмемори, а это имитатор такого ключа.
Алгоритм понятен, непонятна ПИК специфика, тут АВР тока-тока понимать начал.
например
Чё этот хидер даёт ? и чё вместо него надо в винавре подключать ?
или
Код:
|
#define OWSF_READY 1
#define OWDIR TRIS2
#define OWDATA GPIO2 |
понимаю что переназначение, но переназначение чего...
Код:
|
OWSF = 0;
INTE = 1;
INTEDG = 0; |
понимаю что установка битов в регистрах, но каких ?
как это фсё на винавр перевернуть ?
|
|
|
|
12.05.2008, 19:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
|
|
|
|
12.05.2008, 20:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Сообщение от crafty73
|
Чё этот хидер даёт ? и чё вместо него надо в винавре подключать ?
|
это файл подключает описание регистров микроконтроллера.
Сообщение от crafty73
|
Код:
|
#define OWSF_READY 1
#define OWDIR TRIS2
#define OWDATA GPIO2 |
|
TRIS2-это регистр который управляет порты контролера на вход или выход?,управляет здесь наверно портом 2
GPIO2-это сам порт к которому подключается DS1990
OWSF_READY=1 и когда встречается запись OWSF_READY то компилятор вместо нее подставляет 1.
Сообщение от crafty73
|
понимаю что переназначение, но переназначение чего...
Код:
|
OWSF = 0;
INTE = 1;
INTEDG = 0; |
понимаю что установка битов в регистрах, но каких ?
как это фсё на винавр перевернуть ?
|
Да это биты регистров,точно не знаю какие,смотря от пика,но можно выянить
INTE-это разрешение прерывания вывод GPIO2,наверняка это серия пик12
|
|
|
|
13.05.2008, 04:57
|
|
Прохожий
Регистрация: 06.06.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Спасибо!
сразу начало вырисовываться ![Улыбка](images/smilies/icon_smile.gif)
правда пока только FFFFFF пишет, где-то нолики пропали ![Улыбка](images/smilies/icon_smile.gif) само-страшно позади.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:39.
|
|