|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 9:21 pm
PIC18F452+32.768 - Часовников Проблем :-)
| Автор |
Съобщение |
|
me40
Ранг: Новодошъл
Регистриран на: Пет Авг 25, 2006 11:31 pm Мнения: 168 Местоположение: Русе
|
На 7805 имам закачен освен процесора и дисплей 2Х8 .
Тази сутрин си поиграх пак, че нямах време тез дни. Наистина кварца не работи като кварц. Със сигурност не е проблема в него, защото си разглобих часовника Q&Q от студентските години и му извадих кварца (32.768). Сложих го и пак същата работа, като се има впредвид, че на часовника изостава с половин секунда на ден.Пробвах да намаля кондензаторите на същия кварц от 33p на 15p и 4.7p - ефекта беше че започва да брои приблизително два-пъти по бързо. т.е прави каквото си иска. Ето и снимка на кондензаторите (от дясно са на основният кварц, а от ляво на часовниковия). И двата кварца са запоени възможно най близко до самият процесор. Това отгоре е маса, а долните изводи на кондензаторите са директно запоени в/у процесора.
В понеделник ще си поръчам DS1307 и HT1381, но искам да разбера какво става в този случай.
Ето и част от сорс кода:
LIST P=18F452
include "P18F452.INC"
; Конфигурация ;
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
__CONFIG _CONFIG2L, _BOR_OFF_2L & _PWRT_ON_2L
__CONFIG _CONFIG2H, _WDT_OFF_2H
__CONFIG _CONFIG3H, _CCP2MX_OFF_3H
__CONFIG _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
__CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L
__CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
__CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
__CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
__CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
__CONFIG _CONFIG7H, _EBTRB_OFF_7H
ORG 0x000
GOTO 0x10
ORG 0x10
; описание на променливите величини
.....................
;------------------ CONFIG_PIC ----------------------
CLRF PORTA ;Нулиране данните на PORTA
MOVLW 0x07
MOVWF ADCON1 ; настройка PORTA като цифров
CLRF PORTB ;Нулиране данните на PORTВ
CLRF PIE1 ;Забранява прекъсванията от
;PSP,USART,TMR1,TMR2
CLRF TRISA ;Конфигуриране на
;PORTA като изходи RS (RA0), R/W (RA1), E (RA2)
BSF TRISA,3 ;ENTER (RA3)
CLRF TRISB ; Конфигуриране на
;PORTB като изходи DB0...DB7 (LCD display)
MOVLW 0xFF ;Конфигуриране на PORTD
MOVWF TRISD ;като вх. за бутони 0-7 ;RD7 - ляво, RD6 - дясно
;RD5 - горе, RD4 - долу ;RD3 - Enter
BSF TRISC,0 ;външен такт за TMR1
CALL INIT ; инициализация на дисплея
Пропусната е настройката на часовника
;---------------Увеличаване на часовника със секунда------------------------
DV1 CALL LOAD_TMR1 ;Зареждам TMR1 за 1 s
INCF SE ; секунди
MOVLW 0x3C
CPFSEQ SE
GOTO VH
CLRF SE
INCF M ; минути
MOVLW 0x3C
CPFSEQ M
GOTO VH
CLRF M
INCF H ; часове
MOVLW 0x18
CPFSEQ H
GOTO VH
CLRF H
;----------------ИЗВЕЖДАНЕ в/у дисплея -------------------------------
VH CALL RESTLCD_L1
MOVFF H, BIN_DIG
CALL VIEW ; преобразува десетично число
MOVLW A':'
CALL SDLCD
MOVFF M, BIN_DIG
CALL VIEW
MOVLW A':'
CALL SDLCD
MOVFF SE, BIN_DIG
CALL VIEW
UU BTFSS PIR1,TMR1IF ; следя флага за препълване
GOTO UU
GOTO DV1
;-----------------------Зарежда TMR1 за 1 сек ---------------
LOAD_TMR1 BCF T1CON,0 ;Забранява TMR1
BCF PIR1,TMR1IF ;Смъква флага от препълване на TMR1
MOVLW 0x7F
MOVWF TMR1H
MOVLW 0xC8
MOVWF TMR1L
MOVLW b'1111'
MOVWF T1CON
RETURN
Незнам как да го постна че да не се размества
|
| Съб Юли 11, 2009 12:51 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Това: го промени на
не съм убеден, но пипането на останалите битове на T1CON може би води до проблемите. Инициализирай T1CON след RESET и след това не пипай битовете му.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Съб Юли 11, 2009 2:30 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
1. Няма смисъл да изключваш таймера - той е толкова бавен че тия инструкции се изпълняват още преди кварца да се сети че трябва да ходи в другата посока.
2. Какви са ти настройките на таймера - ако е настроен като 16 битов (T1CON.7 = 1) писане в двата регистъра става когато пишеш в TMR1H, демек TMR1L седи в буфер и се пише реално когато запишеш горния. С други думи първо L после H за да се запише и TMR1L. Ама и от това не би трябвало да е щото L трябва да си е нулички когато е превъртял таймера. За всеки случай го сложи в 8-битов режим и само записвай TMR1H. Така и да отбори някой друг такт той ще си остане преброен (в TMR1L).
3. Остава да имаш някакъв хардуерен проблем, щото при xx2 серията досега никога не съм имал проблеми със запалването и работата на осцилатора. С 6620 съм имал грижи ама те са друга бира. Това с намаляването на С и увеличаването толкова много на честотата не е нормално - трябва да играе с малко ама чак толкова - нещо не ти е наред по схемата. Финна настройка става от две изолирани жички усукани енда в друга (стават кондензатор) - колкото повече ги засукваш толкова повече увеличаваш капацитета - така можеш да си го изфиниш много, ама е механично неустойчиво решение.
едит : чак сега виждам : ти това последното трябва да го правиш с прекъсване ЗАДЪЛЖИТЕЛНО щото не знаеш колко цикъла ще минат докато правиш другите неща - затова не ти върви вярно
|
| Съб Юли 11, 2009 4:56 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Верно, прав си, че така беше. И аз имам некви такива съмнения, че не се записват навреме регистрите. Примерно ако се забави малко след като се е напълнил таймера и той отброи няколко цикъла, което е напълно възможно при работа с LCD, като обработи флага на практика ще почне броене от нула вместо от "нещо си" и така ще му изостава часовника. Но ако работи в 8-битов режим ще може да пише само TMR1H и така няма да му се губят цъкания - поне на теория. Все пак се препоръчва работа с прекъсване 
|
| Съб Юли 11, 2009 6:26 pm |
|
 |
|
bongo_x2
Ранг: Форумен бог
Регистриран на: Вто Яну 20, 2009 11:54 pm Мнения: 11338 Местоположение: "Занзибар"
|
Мии, нещо такова ще да е освен ако не е опукал крачето. Щото тъкмо написах в чичко Гугъл "PIC18F452 32.768" и на ви втория резултат: http://www.olimex.com/dev/pdf/PIC/PIC-WEB.pdf
|
| Съб Юли 11, 2009 7:59 pm |
|
 |
|
me40
Ранг: Новодошъл
Регистриран на: Пет Авг 25, 2006 11:31 pm Мнения: 168 Местоположение: Русе
|
Ходих малко на село и тъкмо се прибрах. Преди това премахнах спирането на таймера и го инициализаирам (T1CON) само в началото.
LOAD_TMR1
BCF PIR1,TMR1IF ;Смъква флага от препълване на TMR1
MOVLW 0x80
MOVWF TMR1H
MOVLW 0x00
MOVWF TMR1L
RETURN
Настройката на T1CON е MOVLW b'1111' т.е бит 7=0 (Регистър TMR1 се чете/записва в рамките на две 8 битови операции), като първо се записва старшия байт, а после младшия. Всъщност наистина няма смисъл да записвам в младшият байт, щото при тактова честота няколко мегахерца не ще стигне до никъде с тези 32 ххх .
Досега никога не съм работил с прекъсвания и да си призная не ми е много ясно, но не мисля че някакви си примерно 100-на цикъла и изписване на 8 символа могат да прехвърлят 1 секунда при честота няколко мегахерца. Ако помогнето точно какво да вмъкна в сорса, задължително ще пробвам.
Преди да тръгна за село сверих часовника по http://www.timeanddate.com/worldclock/city.html?n=238.
В момента е със 15 секунди напред ( за 3 часа и половина) !!!!! - таймера зарежда от 8000h.
Във по-горните мнения споменавате за изоставане на часовника, тъй като не ползвам прекъсване, а при мен се получава избързване. Затова си играх преди да коригирам брояча на таймера от 7FC5h, което наистина не води до кой знае какъв резултат, защото кварца не работи като кварц !!!
Може би bongo_x2 е прав , че може да съм опукал крачето. Лошото е че нямам в момента друг 18F452, за да пробвам с него, но имам 4-5 бр. 18F4420. Пробвах преди малко с тях, но нещо немога да направя конфигуриращите битове, защото въобще не пали.
|
| Съб Юли 11, 2009 9:26 pm |
|
 |
|
bongo_x2
Ранг: Форумен бог
Регистриран на: Вто Яну 20, 2009 11:54 pm Мнения: 11338 Местоположение: "Занзибар"
|
Добре де me40, ама още ли не си замерил тази честота? Това определено ще отговори на въпроса "Хардуерен или софтуерен проблем?".
Без фина техника ще е трудно да я замериш директно от кварца но разклати по сигурен начин някой пин (не съм спец по пиковете) и после и с компа ще я замериш (особено ако я разделиш няколко пъти).
Edit: Попитай гугъла за "PC software frequency meter" ако не ти харесва shareware OscilloMeter.
|
| Съб Юли 11, 2009 10:11 pm |
|
 |
|
me40
Ранг: Новодошъл
Регистриран на: Пет Авг 25, 2006 11:31 pm Мнения: 168 Местоположение: Русе
|
Какво ще рече да разклатя по сигурен начин някой пин? Ако мога някак да го докарам до 5в, ще мога да я измеря, защото имам уред който мери до 10mhz, но му трябва поне 2-3 волта. Но и аз незнам дали мога софтуерно да накарам някой порт да вади лог'1' в такт с таймера.
Иначе като спомена за картата на компа се сетих , че мога и през усилвателя да я мина (не ми се вярва 32к да неможе да свирне) и после да я измеря. От самият кварц не съм пробвал, но предполагам ще съборя генератора.
Утре ще направя генератор с някой 7400
п.с Намерих с 4069 , но ако нямам ето и с един транзистор и кварц - просТ генератор
http://www.elecfree.com/electronic/wp-c ... cilate.gif
|
| Съб Юли 11, 2009 10:43 pm |
|
 |
|
bongo_x2
Ранг: Форумен бог
Регистриран на: Вто Яну 20, 2009 11:54 pm Мнения: 11338 Местоположение: "Занзибар"
|
Като казах "фина техника" имах предвид поне 10мОма/1пФ или безконтактно.
Ся, не ме прави пикоборец безвреме (не че не ща да стана такъв) ама под "сигурен начин" разбирам пика да има единствената задача да клати някой пин. А като хвърлих око на схемата ми хареса Watchdog Timer.
Имай предвид, че 15с за 3-и часа не се мерят лесно. По ще го хванеш като си играеш със захранването - ако не се влияе от него нямаш проблем.
|
| Съб Юли 11, 2009 11:12 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
Мечо,
имай предвид, че всеки кварц както паралелна, също така има и серийна(последователна) собствена честота. Това значи, че ако ползваш кварц с ХХ кХц честота на паралелен резонанс, то и в схемата на генератора кварца трябва да работи в паралелен резонанс. Т.е. ако го включиш в положителната ОВ по ток ще генерираш различна честота... само ти припомням тези неща.
А при делене на честота се дели и фазовата(честотна) грешка. Това значи че ако използваш по-високочестотен кварц с някакъв прост синтезатор(май 4046 може да се ползва за това), ще постигнеш по-добра фазова стабилност.
Писал съм проект в университета точно за методи за борба с фазовите шумове. Ако намеря резултатите ще ги кача(наскоро преинсталирах...).Кажи само дали имаш интерес.
Успех.
|
| Нед Юли 12, 2009 1:40 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
С включен осцилатор пин T1OSO(RC0) ти е инвертиран изход след усилвател, демек реално той ти клати кварца. С други думи там би трябвало да имаш 5V които да замериш. Даже и с обикновен уред съм мерил - ако имаш 0 или 5 волта на него значи не се клати, ако имаш нещо около 2 волта вече можеш да прибегнеш до мерене с честотомер. Даже в момента имам едно устройство на масата - ще го тествам със звуковата карта да видя какво има на крачето и ще пиша.
15 сек. за три часа е много - обикновенно тия кварцове правят по около минута +/- на месец.
За прекъсване :
разрешаваш GIE бита от INTCON и TMR1IE в PIE1 (PIE1.0)
после
ORG 0x000
GOTO 0x10
ORG 0x10
става
ORG 0x000
GOTO 0x10
ORG 0x08 ; вектор на прекъсването
GOTO interrupt
ORG 0x10
;твоята програма
interrup
;тука си записваш стойностите в регистър и вдигаш някакъв флаг, че имаш секунда който после в главната програма го полваш увеличаваш секунди, минути и часове и го нулираш, нещо от сорта ще свърши работата в прекъсването :
MOVFF t1hstart,TMR1H ; това може вместо MOVLW xxx MOVWF xxx, само трябва предварително да запишеш в t1hstart 0xC8
BSF var1,0 ;това ти е флага за секунда . Между другото тук можеш да вкараш и увеличаване на секунди, минути, часове - даже е по добре така да е в твоя случай.
BCF PIR1,0
retfie 1; това ти излиза от прекъсването
между другото осцилатора работи и в sleep режим така че може допълнително да се изцеди от към консумация и главната ти програма би изглеждала така :
DISP .... ; извеждане на дисплея
sleep
goto DISP
Така при препълване на тмр1 животното ще се събуди, ще влезе в прекъсването, ще ъпдейтне сек, мин, час, после ще направи гото дисп и пак ще заспи.
Аз по принцип си правя таймера на половин секунда за да мога да мигам някаква точка - както е на повечето електронни часовници, ама ти така го подкарай пък после го прави и да мига.
Ако имаш въпроси питай.
edit : мойта звукова карта мери само някакъв хармоник на 1220 Hz. Другото не го хваща 
|
| Нед Юли 12, 2009 10:55 am |
|
 |
|
me40
Ранг: Новодошъл
Регистриран на: Пет Авг 25, 2006 11:31 pm Мнения: 168 Местоположение: Русе
|
Cekins,
Благодаря за пояснението с прекъсването и sleep-a.
На 13 и 14 крачета има съответно 1.86 и 1.93 волта. Пробвах да сложа уреда и ми показа 4.43-4.44mhz (използвам за основен кварц 4.43 mhz)
На 15 кр имам 0.76 волта и съответно нищо немога да измеря с уреда. Това значи ли че работi осцилатора T1OSO(RC0)? На осцилоскоп се вижда синусоида около 30 us . Значи приблизително 33 khz, но на 16 краче. На 15 малко като кретеноида  седи, една такава несиметрична
|
| Нед Юли 12, 2009 11:31 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
С каква честота ти е синусуидата? Би трябвало с честотомера да го хване.
Мернах го ей сега и на мен ми показва 0,8V и си работи нормално, значи по софтуера ще ти е проблема. Не съм го засичал с каква точност е ама предполагам не бяга с толкова колкото при теб.
Ей сега го пуснах и ще го засека с Casio-то да видим какво ще стане. По късно ще пусна резултат.
Едит : абе нещо не е наред ама не мога да разбера какво. Ти на RC0 трябва да имаш някакъв почти правоъгълен сигнал, а не нещо несиметрично - виж в PDF-a каква е схемата на осцилатора.
Последна промяна Cekins на Нед Юли 12, 2009 11:52 am, променена общо 1 път
|
| Нед Юли 12, 2009 11:44 am |
|
 |
|
me40
Ранг: Новодошъл
Регистриран на: Пет Авг 25, 2006 11:31 pm Мнения: 168 Местоположение: Русе
|
Е щом и при теб е 0.8 волта, значи би трябвало това да е нормално. Би трябвало и при теб даде разлики в + т.е избързване.
Предполагам На LCD дисплей го наблюдаваш?
|
| Нед Юли 12, 2009 11:47 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
На 7seg LED, до тук 11 минути и не е мръднал. В твоя случай тук вече имаш секунда. Ще ти кажа след 20-30 минути как е.
|
| Нед Юли 12, 2009 11:54 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|