| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| PIC 16F1824 с DS1307-как се конфигурира? http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=9803 |
Страница 1 от 2 |
| Автор: | lz2ddl [ Пет Яну 20, 2012 3:47 pm ] |
| Заглавие: | PIC 16F1824 с DS1307-как се конфигурира? |
Здравейте уважаеми съфорумци! Пиша за първи път, но се опитах да прочета преди това и не успях да намеря нужната информация. Ако съм пропуснал нещо, предварително се извинявам. Та несгодата ми е следната: Започнах да пиша малка програмка за горния РІС (на MikroPascal). Самото софтче не изпълнява кой знае какви задачи, и със скромния си опит успях да постигна задоволителни резултати, но стигнах до свързването на DS1307 и закъсах. С две думи-не тръгна. Четох описанието на двата чипа и отново не можах да ги подкарам. РІС-а си има хардуерна І2С поддръжка, но явно не мога да го конфигурирам. DS1307 съм свързал с изтеглящи резистори към SDA и SCL изводите първо по 10к, а после по 5к (два по 10к в паралел), и пак не заработи. Пробвах с батерия и без батерия но резултатите са същите. Голямата ми молба към вас е едно рамо, ако може, за първоначалното конфигуриране на пика или каквато и да е помощ в тази посока. От самата програма мисля няма да има смисъл да да пускам извадки, защото е на Pscal, както споменах, а вие работитите със С на много професионално ниво. Ползвал съм примери, които са работещи и ми се струва, че няма да са ви полезни. Още веднъж се извинявам за глупавия ми въпрос и предварително благодаря на отзовалите се! |
|
| Автор: | lz2ddl [ Пет Яну 20, 2012 9:18 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
В допълнение на въпроса ми по-долу ви давам част от сорса, в който съм упоменал конфигурацията на РІС-а. Писал съм и излишни редове, но четейки датасшийта пробвах каквото разбрах. Може да има и безсмислени редове, но до тук ми се простират възможностите. Принципно, в хелпа на МикроПаскала пише, че след инит-процедурата, SDA и SCL изводите се конфигурират автоматично. Правих тестове с извеждане на звук на едно пиезо-зумерче, като задавах колко време да пищи и колко да не пищи и ми направи впечатление, че интервалите зависеха от тактовата честота на контролечето. Колкото е по-ниска честотата, толкова по-малки са интервалите, въпреки че ползвах процедурата VDelay_Advanced_ms(time_ms, Current_Fosc_kHz: word). Както се вижда, освен времето в милисекунди, се чете и честотата на пика, като съм ползвал процедурата Clock_kHz() (например VDelay_Advanced_ms(700, Clock_kHz); за закъснение от 700мсек.). Дано това помогне на разбиращите колеги, тъй като аз не мога да разбера какъв е проблема. Нямам осцилоскоп под ръка и сглобих един, който ползва звуковата карта, но не мога да кажа дали измервам правилно, защото шината SCL е конфигурирана на 100 kHz, а звуковата карта няма как да ги измери. Дадох примера със звука с пиезо-зумера, защото не мога да разбера в крайна сметка кои 100 kHz са наистина толкова (при тактова честота 4 MHz, 8MHz, 0.5MHz или друга стойност|. С няколко думи влязох в джаза яко! Силно се надявам на помощ, тъй като видях доста преглеждания на въпроса ми и още веднъж благодаря предварително! П.П. Записите в Епрома съм правил за да проверя дали има някаква комуникация, а процедурата TestRead, съм копирал от уж работещ пример. PORTA:= 0; PORTC:= 0; TRISA:= 0; TRISC:= 31; TRISC0_bit:= 1; TRISC1_bit:= 1; TRISC2_bit:= 1; TRISC3_bit:= 1; TRISC4_bit:= 1; INLVLC:= 0; LATC:=0; SSP1CON1:= 59; WPUC0_bit:= 1; WPUC1_bit:= 1; OPTION_REG.7:= 0; SSPEN_bit:= 1; CKP_bit:= 1; SSP1IE_bit:=1; I2c1_Init(100000); procedure TestRead; var I: byte; begin I2c1_Start(); // Issue I2C start signal I2c1_Wr($D0); // Send I2c Write Slave Address I2c1_Wr(0); // Send Rtc2 Register Address I2c1_Repeated_Start(); // Issue I2C repeated start signal I2c1_Wr($D1); // Send I2c Read Slave Address for I := 0 to 7 do begin if I = 7 then UsVal[I] := I2c1_Rd(0) // no ack: last byte to read else UsVal[I] := I2c1_Rd(1); // with ack end; I2c1_Stop; EEPROM_Write(0, USVal[0]); EEPROM_Write(1, USVal[1]); EEPROM_Write(2, USVal[2]); EEPROM_Write(3, USVal[3]); EEPROM_Write(4, USVal[4]); EEPROM_Write(5, USVal[5]); EEPROM_Write(6, USVal[6]); EEPROM_Write(7, USVal[7]); end; |
|
| Автор: | Cekins [ Пет Яну 20, 2012 10:54 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
Ако си решил да ползваш бейсик за 8 битовите зарежи микробейсика - протона е (лично според мен) поне 10 пъти по добър. Сега по проблема - първо за да видиш дали ти тръгва коректно I2C-то ще ти трябва скоп. Иначе само ще чуваш изпуквания по време на комуникацията... Осцилатора също се вижда със скоп дали тръгва. Ама DS1307 пък няма да тръгне Или поне докато не му подадеш $00 на адрес $00 И зарежи микробейсика. Читава версия (с хапче) на протон-а има на www.rutracker.org (Proton IDE) - няма неканени гости в нея. |
|
| Автор: | lz2ddl [ Съб Яну 21, 2012 12:54 am ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
Cekins, благодаря за отговара! Редактирах предния си пост, като зачервих реда, в който смятам че става това записване на $00 на адрес $00 (до колкото разбирам говориш за СН-бита на нулевия адрес). Кода е писан на Паскал и споменах, че е изваден едно към едно от работеща програма (поне по думите на човека, който я е писал). |
|
| Автор: | Cekins [ Съб Яну 21, 2012 12:31 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
Ми не - значи схемата е следната : адрес на дивайса адрес от паметта ----- за четене : рестарт на и2ц команда за четене (адреса с read bit set) четене на клетка или адрес на дивайса адрес на паметта ----- за запис : запис на данните демек програмат трябва да има нещо от сорта : I2c1_Start(); // Issue I2C start signal I2c1_Wr($D0); // Send I2c Write Slave Address I2c1_Wr(0); // Send Rtc2 Register Address I2c1_Wr(0); // ей това ще запише вече $00 в адрес $00 I2c1_Stop; Това трябва да ти е веднъж в програмата за да не ти нулира постоянно секундите, защото в този регистър са и те. Аз лично, след като стартирам програмата си чета две клетки от рам-а на ртц-то в които очаквам да има 0x55 и 0xAA. Ако няма чак тогава нулирам адреса и записвам 0х55 и 0хАА в тия две клетки. Така ако батерията я има те ще си останат такив аи при следващо пускане на процесора ще се прочетат - значи всичко е ок и няма нужда от нулиране. Ако са някакви други си го нулирам и готово. |
|
| Автор: | lz2ddl [ Съб Яну 21, 2012 1:15 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
То се вижда, че май с теб само комуникираме, за което ти благодаря! Това ще пробвам на момента, само да променя малко кода, че снощи пробвах с една библиотека за софт. I2C и така зарязах всичко. А това за грешната честота на MCU-то дали има нещо вярно или си въобразявам? |
|
| Автор: | lz2ddl [ Съб Яну 21, 2012 1:57 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
Проверих това: I2C1_start; // issue I2C start signal I2C1_wr($D0); // Command RTC write I2C1_wr(0); // Set pointer to mins/secs I2C1_Wr(0); тук пробвах с I2C1_Repeated_Start; и с I2C1_start; I2C1_wr($D1); // Command RTC read I2C1_Wr(0); for I := 0 to 7 do begin if I = 7 then UsVal[I] := I2c1_Rd(0) // no ack: last byte to read else UsVal[I] := I2c1_Rd(1); // with ack end; I2C1_Stop; EEPROM_Write(0, USVal[0]); EEPROM_Write(1, USVal[1]); Не излезе нищо. Блокира си програмата и това е. Проверих с Repeated_Start, без него и също със I2С1_Start и резултат никакъв. Това малко осмокрако дяволче ме вкара в приключение! А най-лошото е, че не мога да намеря симулатор за тази ИС и на всяка промяна на една запетайка даже компилирам, товаря на ПИК-а, навирам го в цокъла на пробната платка, пускам, псувам и пак отначало. |
|
| Автор: | head_up [ Съб Яну 21, 2012 4:27 pm ] | |||||||||
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? | |||||||||
Добре дошъл в клуба |
||||||||||
| Автор: | lz2ddl [ Съб Яну 21, 2012 4:45 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
То си така, ама срещу дърво като има друго, става гора и освен за тачки за друго не стават. Пък и моята детска мечта определено не е да се ядосвам с точно тези гадове, ама "пък мий убаво бе!" Ще продължавам да ги мачкам, дано има напредък. Между другото в момента слушам една песен на Accept - Balls to the Wall и си я представям във вариант "PICs to the Wall" Но май се поувлякох. Желая на всички, прочели мъките, ми лек и приятен ден! Аз продължам! |
|
| Автор: | CarBeta [ Съб Яну 21, 2012 8:03 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
SDA и SCL трябва да са конфигурирани като digital I/O. Не виждам да изключваш ADC'то. Поне в кода дето си пуснал. |
|
| Автор: | lz2ddl [ Съб Яну 21, 2012 8:22 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
ADC-не изключвам, защото го ползвам в друга част от софта. Той следи за напрежение през цикъл while(); и т.н. Освен него ползвам и PWM модула-постоянно, докато работи и ADC-то. Това дали ще е пречка? Май ще трябва да направя една постановка за тест на всичко по отделно (в интерс на истината ADC и PWM модулите работят заедно без проблем и за сега си вършат работата както трябва). |
|
| Автор: | Cekins [ Съб Яну 21, 2012 8:34 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
I2C модула ВИНАГИ взема пълен контрол над пиновете - включиш ли го - край с всичко останало дето е там. Не е проблема в пика, не е и в далас-а. Имаш ли някакъв вариант за дебъг? Примерно MAX232 закачен към UART-а на пикчето? Някой светодиод някъде? Ако имаш пиккит2 можеш него да ползваш за UART директно без конвертор на нива. |
|
| Автор: | CarBeta [ Съб Яну 21, 2012 9:11 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
Опитай да коментираш двата реда, с които разрешаваш вътрешните пуллъп, и да остане само с външните резистори. |
|
| Автор: | Cekins [ Съб Яну 21, 2012 9:15 pm ] | |||||||||
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? | |||||||||
Ама като казвам пълен имам предвид 101% пълен - нито пулъпи, нито ацп-та, нищо ... Сега.... Напиши една програмка дето само да запише нулата в нулевия регистър и 0x10 в адрес 0х07. След това с един светодиод на sqw изхода на ds1307 (с минуса към чипа и с по големичък резистор че да не го пратиш във вечните силиконови полета) виж дали ще почне да мига. |
||||||||||
| Автор: | lz2ddl [ Съб Яну 21, 2012 9:22 pm ] |
| Заглавие: | Re: PIC 16F1824 с DS1307-как се конфигурира? |
Това с пулъпите съм го правил и няма резултат. Имам пиккит2 на Сириус (този: http://www.sirius-pcb.com/index.php?mod ... g&show=127) но не знам става ли за дебъг и ако да-как? Може би това става с MPLAB-а а аз съм на МикроПаскал (сръбска измишльотина). А индикация за работа ползвам една процедура за извеждане на единица на един пин от А-регистъра, към който през транзистор включвам зумер. Това ми трябва за готовото устройсво. А между другото точно с тази процедура разбрах, че има проблем с тактовия генератор, защото (както съм описал по-горе) времето за включване на зумера при различните тактови честоти се променя. По-горе във втория ми пост съм описъл. Сега се заиграх и пуснах една програмка, в която вкарах само I2C процедурите без нищо друго, резултата е същия-няма резултат. А щом това със 101% процента става, не трябва ли след като си свърши работата І2С модула, да освободи поне 90% за свършване на останалата работа? |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|