|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 12:28 am
PIC 16F1824 с DS1307-как се конфигурира?
| Автор |
Съобщение |
|
lz2ddl
Ранг: Минаващ
Регистриран на: Вто Юли 06, 2010 5:17 pm Мнения: 12 Местоположение: Велико Търново
|
 PIC 16F1824 с DS1307-как се конфигурира?
Здравейте уважаеми съфорумци! Пиша за първи път, но се опитах да прочета преди това и не успях да намеря нужната информация. Ако съм пропуснал нещо, предварително се извинявам. Та несгодата ми е следната: Започнах да пиша малка програмка за горния РІС (на MikroPascal). Самото софтче не изпълнява кой знае какви задачи, и със скромния си опит успях да постигна задоволителни резултати, но стигнах до свързването на DS1307 и закъсах. С две думи-не тръгна. Четох описанието на двата чипа и отново не можах да ги подкарам. РІС-а си има хардуерна І2С поддръжка, но явно не мога да го конфигурирам. DS1307 съм свързал с изтеглящи резистори към SDA и SCL изводите първо по 10к, а после по 5к (два по 10к в паралел), и пак не заработи. Пробвах с батерия и без батерия но резултатите са същите. Голямата ми молба към вас е едно рамо, ако може, за първоначалното конфигуриране на пика или каквато и да е помощ в тази посока. От самата програма мисля няма да има смисъл да да пускам извадки, защото е на Pscal, както споменах, а вие работитите със С на много професионално ниво. Ползвал съм примери, които са работещи и ми се струва, че няма да са ви полезни. Още веднъж се извинявам за глупавия ми въпрос и предварително благодаря на отзовалите се!
|
| Пет Яну 20, 2012 3:47 pm |
|
 |
|
lz2ddl
Ранг: Минаващ
Регистриран на: Вто Юли 06, 2010 5:17 pm Мнения: 12 Местоположение: Велико Търново
|
 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;
Последна промяна lz2ddl на Съб Яну 21, 2012 12:47 am, променена общо 1 път
|
| Пет Яну 20, 2012 9:18 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
Ако си решил да ползваш бейсик за 8 битовите зарежи микробейсика - протона е (лично според мен) поне 10 пъти по добър. Сега по проблема - първо за да видиш дали ти тръгва коректно I2C-то ще ти трябва скоп. Иначе само ще чуваш изпуквания по време на комуникацията... Осцилатора също се вижда със скоп дали тръгва. Ама DS1307 пък няма да тръгне  Или поне докато не му подадеш $00 на адрес $00  чети по-внимателно даташита - 7-ми бит на адрес $00 контролира осцилатора и трябва да се запише 0 в него за да тръгне. Досега не съм случвал чип дето да тръгне по дифолт (иначе в даташийта пише че се инициализират в незнайно състояние - би трябвало все някога да се инициализира в 0 - може и аз малко да съм пробвал). И зарежи микробейсика. Читава версия (с хапче) на протон-а има на www.rutracker.org (Proton IDE) - няма неканени гости в нея.
|
| Пет Яну 20, 2012 10:54 pm |
|
 |
|
lz2ddl
Ранг: Минаващ
Регистриран на: Вто Юли 06, 2010 5:17 pm Мнения: 12 Местоположение: Велико Търново
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
Cekins, благодаря за отговара! Редактирах предния си пост, като зачервих реда, в който смятам че става това записване на $00 на адрес $00 (до колкото разбирам говориш за СН-бита на нулевия адрес). Кода е писан на Паскал и споменах, че е изваден едно към едно от работеща програма (поне по думите на човека, който я е писал).
|
| Съб Яну 21, 2012 12:54 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 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хАА в тия две клетки. Така ако батерията я има те ще си останат такив аи при следващо пускане на процесора ще се прочетат - значи всичко е ок и няма нужда от нулиране. Ако са някакви други си го нулирам и готово.
|
| Съб Яну 21, 2012 12:31 pm |
|
 |
|
lz2ddl
Ранг: Минаващ
Регистриран на: Вто Юли 06, 2010 5:17 pm Мнения: 12 Местоположение: Велико Търново
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
То се вижда, че май с теб само комуникираме, за което ти благодаря! Това ще пробвам на момента, само да променя малко кода, че снощи пробвах с една библиотека за софт. I2C и така зарязах всичко. А това за грешната честота на MCU-то дали има нещо вярно или си въобразявам? 
|
| Съб Яну 21, 2012 1:15 pm |
|
 |
|
lz2ddl
Ранг: Минаващ
Регистриран на: Вто Юли 06, 2010 5:17 pm Мнения: 12 Местоположение: Велико Търново
|
 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 и резултат никакъв. Това малко осмокрако дяволче ме вкара в приключение! А най-лошото е, че не мога да намеря симулатор за тази ИС и на всяка промяна на една запетайка даже компилирам, товаря на ПИК-а, навирам го в цокъла на пробната платка, пускам, псувам и пак отначало.
|
| Съб Яну 21, 2012 1:57 pm |
|
 |
|
head_up
Ранг: Форумен бог
Регистриран на: Нед Юни 01, 2008 9:54 pm Мнения: 1503 Местоположение: Пловдив
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
Добре дошъл в клуба  Гадничко е, но така се прави с тия дървета ...
|
| Съб Яну 21, 2012 4:27 pm |
|
 |
|
lz2ddl
Ранг: Минаващ
Регистриран на: Вто Юли 06, 2010 5:17 pm Мнения: 12 Местоположение: Велико Търново
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
То си така, ама срещу дърво като има друго, става гора и освен за тачки за друго не стават. Пък и моята детска мечта определено не е да се ядосвам с точно тези гадове, ама "пък мий убаво бе!" Ще продължавам да ги мачкам, дано има напредък. Между другото в момента слушам една песен на Accept - Balls to the Wall и си я представям във вариант "PICs to the Wall"  и да ги гърмя с помпата като капачки на стрелбище. Но май се поувлякох. Желая на всички, прочели мъките, ми лек и приятен ден! Аз продължам!
|
| Съб Яну 21, 2012 4:45 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
SDA и SCL трябва да са конфигурирани като digital I/O. Не виждам да изключваш ADC'то. Поне в кода дето си пуснал.
|
| Съб Яну 21, 2012 8:03 pm |
|
 |
|
lz2ddl
Ранг: Минаващ
Регистриран на: Вто Юли 06, 2010 5:17 pm Мнения: 12 Местоположение: Велико Търново
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
ADC-не изключвам, защото го ползвам в друга част от софта. Той следи за напрежение през цикъл while(); и т.н. Освен него ползвам и PWM модула-постоянно, докато работи и ADC-то. Това дали ще е пречка? Май ще трябва да направя една постановка за тест на всичко по отделно (в интерс на истината ADC и PWM модулите работят заедно без проблем и за сега си вършат работата както трябва).
|
| Съб Яну 21, 2012 8:22 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
I2C модула ВИНАГИ взема пълен контрол над пиновете - включиш ли го - край с всичко останало дето е там.
Не е проблема в пика, не е и в далас-а.
Имаш ли някакъв вариант за дебъг? Примерно MAX232 закачен към UART-а на пикчето? Някой светодиод някъде?
Ако имаш пиккит2 можеш него да ползваш за UART директно без конвертор на нива.
|
| Съб Яну 21, 2012 8:34 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
Опитай да коментираш двата реда, с които разрешаваш вътрешните пуллъп, и да остане само с външните резистори.
|
| Съб Яну 21, 2012 9:11 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
Ама като казвам пълен имам предвид 101% пълен - нито пулъпи, нито ацп-та, нищо ... Сега.... Напиши една програмка дето само да запише нулата в нулевия регистър и 0x10 в адрес 0х07. След това с един светодиод на sqw изхода на ds1307 (с минуса към чипа и с по големичък резистор че да не го пратиш във вечните силиконови полета) виж дали ще почне да мига.
Последна промяна Cekins на Съб Яну 21, 2012 9:24 pm, променена общо 1 път
|
| Съб Яну 21, 2012 9:15 pm |
|
 |
|
lz2ddl
Ранг: Минаващ
Регистриран на: Вто Юли 06, 2010 5:17 pm Мнения: 12 Местоположение: Велико Търново
|
 Re: PIC 16F1824 с DS1307-как се конфигурира?
Това с пулъпите съм го правил и няма резултат. Имам пиккит2 на Сириус (този: http://www.sirius-pcb.com/index.php?mod ... g&show=127) но не знам става ли за дебъг и ако да-как? Може би това става с MPLAB-а а аз съм на МикроПаскал (сръбска измишльотина). А индикация за работа ползвам една процедура за извеждане на единица на един пин от А-регистъра, към който през транзистор включвам зумер. Това ми трябва за готовото устройсво. А между другото точно с тази процедура разбрах, че има проблем с тактовия генератор, защото (както съм описал по-горе) времето за включване на зумера при различните тактови честоти се променя. По-горе във втория ми пост съм описъл. Сега се заиграх и пуснах една програмка, в която вкарах само I2C процедурите без нищо друго, резултата е същия-няма резултат. А щом това със 101% процента става, не трябва ли след като си свърши работата І2С модула, да освободи поне 90% за свършване на останалата работа?
Последна промяна lz2ddl на Съб Яну 21, 2012 9:33 pm, променена общо 1 път
|
| Съб Яну 21, 2012 9:22 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|