Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Проблема с конвертацией результата от ds1307
Проблема с конвертацией результата от ds1307
tesla88 Дата: Пн, 12.01.2015, 13:08  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

Всем привет, собрал я себе часы на pic16f876a - 74hc595 и ds1307, железо всё проверил всё работает, возникла проблема с конвертацией значений из ds1307 на индикаторы, пытаюсь вывести секунды на два первых индикатора а выводится набор произвольных чисел,  привожу пример кода и саму плату, товарищи направьте на путь истинный bash
Прикрепления: 7sigments-.zip (75.7 Kb) · 8287135.jpg (33.4 Kb)
ЯНДЕКС Дата: 12.01.2015
tesla88 Дата: Пн, 12.01.2015, 14:20  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

поправил немного код , в протеусе заработало,но в железе показания секунд скачут до третьего разряда и всё время разные, хотя когда просто отображаю переменную на индикаторах все правильно , похоже обмен данными с DS1307 происходит криво, хотя схема собрана по мануалам... cry
Device 16F876A 

'-------------------------------- -----Предустановки--------------------------------------------- 
Xtal 4 
Declare All_Digital = 1 
Declare PortB_Pullups = OFF 'Выключить подтягивающие резисторы на PORTB 
Declare CCP1_Pin PORTC.2 'Вывод для HPWM модуля CCP1 
Declare CCP2_Pin PORTC.1 'Вывод для HPWM модуля CCP2 
'-------------------------------------Настройки портов---------------------------------------------- 
TRISA = %00000000 
TRISB = %00001111 
TRISC = %00000001 
PORTB = %00000000 
PORTC = %00000000 
'-----------------------------------Конфигурация переменных----------------------------------------- 
Symbol DS PORTC.5 'Вход данных для сдвигового регистра 
Symbol SH_CP PORTC.7 'Вход тактовых импульсов для сдвигового регистра 
Symbol ST_CP PORTC.6 'Защелка сдвигового регистра 
Dim Value As Byte 'Переменная для преобразования табличной конвертации 
Dim n As Byte 'Переменная для выделения из числа цифры разряда 
Dim i As Word 'Переменная организации счетчика цифр 
Dim j As Word 'Переменная организации счетчика задержки 

Symbol setup  = PORTB.1
Symbol up  = PORTB.2
Symbol down = PORTB.3
Symbol enter = PORTB.4
rtc_read CON %11010001 ' Адрес часов для чтения 
rtc_write con %11010000 ' Адрес часов для записи 

Dim hr As Byte ' часы в формате DS1307 
Dim hr1 As Byte ' часы в десятичном формате 

Dim yr1 As Byte 
Dim d_hi As Byte
Dim d_lo As Byte
Dim tmp As Byte 
Dim tmp1 As Byte

Dim x As Byte
Dim y As Byte
x = 127

HPWM 1, 255 , 1000  'Сгенерировать ШИМ сигнал для засветки индикатора 

in:
HBStart
HBusOut rtc_write, $07, [%00010000] 
HBStop

'-------------------------------------Главная программа--------------------------------------------- 
Start: 
For y = 0 To 9999 
For j = 0 To 30

GoSub read_time
GoSub Ind 
DelayMS 100 
Next
Next
 
GoTo Start 
'---------------------------------Подпрограмма индикации-------------------------------------------- 
Ind: 
n = hr1 Dig 0: GoSub Convert: SHOut DS, SH_CP, MsbFirst,
[Value]n = hr1 Dig 1: GoSub Convert: SHOut DS, SH_CP, MsbFirst,  
[Value]n = hr1 Dig 2: GoSub Convert: SHOut DS, SH_CP, MsbFirst,  
[Value]n = hr1 Dig 3: GoSub Convert: SHOut DS, SH_CP, MsbFirst,
[Value]'n = hr1.0: GoSub Convert: SHOut DS, SH_CP, MsbFirst,  
[Value]'n = hr1.1: GoSub Convert: SHOut DS, SH_CP, MsbFirst,
[Value]'n = hr1.2: GoSub Convert: SHOut DS, SH_CP, MsbFirst,
[Value]'n = hr1.3: GoSub Convert: SHOut DS, SH_CP, MsbFirst,
[Value]PulsOut ST_CP, 10  

Return 
'----------------------------Подпрограмма табличной конвертации------------------------------------- 
Convert: 
Value = LookUp n, [192,249,164,176,153,146,130,248,128,144,156] ' Для схемы индикаторов с ОА 
'Value = LookUpL n, [63,6,91,79,102,109,125,7,127,111] ' Для схемы индикаторов с ОК 

Return 
read_time: 
HBStart
HBusIn RTC_read, $00,

DelayMS 1
HBStop 
tmp = hr 
GoSub fix_bcd_in
hr1 = tmp 
 Return

fix_bcd_in:
tmp1 = tmp & 15 
tmp = tmp >> 4 
tmp = tmp1 + 10 * tmp 
Return
Прикрепления: 5796358.zip (75.8 Kb)
mikhail09p Дата: Пн, 12.01.2015, 14:36  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Я так делал:
Read_time:'----- чтение ------------------------------------------------
    BStart
    BusIn $D0, $00, [Sec,Mins,Hr]',Day,Date,Mon,Yr]
    BStop 
    Tmp = Sec
    GoSub Fix_bcd_in
    Sec1 = Tmp
    Tmp = Mins
    GoSub Fix_bcd_in
    Mins1 = Tmp
    Tmp = Hr
    GoSub Fix_bcd_in
    Hr1 = Tmp
    'Tmp = Date
    'GoSub Fix_bcd_in
    'Date1 = Tmp
    'Tmp = Mon
    'GoSub Fix_bcd_in
    'Mon1 = Tmp
    'Tmp = Yr
    'GoSub Fix_bcd_in
    'Yr1 = Tmp
    Return

Write_time:'---------запись----------------------------------------------
    Tmp = Sec1
    GoSub Fix_bcd_out
    Sec = Tmp
    Tmp = Mins1    
    GoSub Fix_bcd_out                            
    Mins = Tmp
    Tmp = Hr1                     
    GoSub Fix_bcd_out                             
    Hr = Tmp
    'Tmp = Date1                          
    'GoSub Fix_bcd_out                             
    'Date = Tmp
    'Tmp = Mon1                             
    'GoSub Fix_bcd_out                             
    'Mon = Tmp
    'Tmp = Yr1                            
    'GoSub Fix_bcd_out                           
    'Yr = Tmp
    'Sec = 0
    BStart
    BusOut $D1, 0, [Sec,Mins,Hr]',Day,Date,Mon,Yr]
    BStop
    Return

Fix_bcd_in:'--------------------------------------------------------------------
    Tmp1 = Tmp & 15
    Tmp = Tmp >> 4
    Tmp = Tmp1 + 10 * Tmp
    Return

Fix_bcd_out:'-------------------------------------------------------------------
    Tmp1 = Tmp / $A 
    Tmp = Tmp - (Tmp1 * $A) 
    Tmp = Tmp + (Tmp1 << 4)
    Return
MiXaS Дата: Пн, 12.01.2015, 14:44  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

tesla88, скорее всего шумит питание. У меня было подобное. Тем более я так понял ВЫ используете шим аппаратный. Для начала повесьте кондеры на 74hc595 и ds1307, не менее 100 мкф(чтоб на верняка). И сам пик надо закондерить.
tesla88 Дата: Пн, 12.01.2015, 14:47  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

СЕЙЧАС ПОПРОБУЮ , СПАСИБО
tesla88 Дата: Вт, 13.01.2015, 19:35  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

В общем попробовал поставить кондёры, отключил шим, поменял микруху с кварцем, результатов это не дало, снял видео  и фото работы часов,  осциллограф у меня слабый , на sda особо не посмотришь данные, а вот синро импульсы видно , и в сравнении с протеусом заметна разница, перед девятью импульсами синхронизации идет более продолжительный первый импульс после просадки scl на фото все видно, при эмуляции в протеусе этого импульса нет, я в тупике book bash :bash: bash
Прикрепления: 8235046.jpg (139.5 Kb) · 8418850.jpg (100.8 Kb)

Сообщение отредактировал tesla88 - Вт, 13.01.2015, 19:36
ivan_fd Дата: Вт, 13.01.2015, 21:03  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Где видео?

Схема включения(реальная!!), последняя программа, которую шьете.???
tesla88 Дата: Ср, 14.01.2015, 00:59  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

видео не грузится, схема такая же,  прога тоже , разница с протеусом только в подтяжке sda и scl, в плате они подтянуты к общему плюсу а не батарейке
MiXaS Дата: Ср, 14.01.2015, 09:28  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

tesla88, вопрос: А зачем Вы так часто опрашиваете ds1307? Он же обновляется 1 в секунду.
Ребята, объясните мне пожалуйста, почему когда пишу код под ds1307 как положено со всеми Bstart.. Bstop.. (все как в даташите) у меня не опрашивается, либо некорректно работает. Как только прописываю одно строку для опроса
BusIn $D1,$00,[DS1307[0],DS1307[1],DS1307[2],DS1307[3],DS1307[4],DS1307[5],DS1307[6],DS1307[7]] все работает нормально?
Память опрашиваю как и положено со всеми причендалами:

Код
BStart                    
BusOut %10101110                       
BusOut H_ad_e                          
BusOut L_AD_E                          
BReStart                    
BusOut %10101111                       
For loop = 0 To 7                      
array [loop] = BusIn                    
If loop = 7 Then BStop : Else : BusAck : DelayMS 1
Next


и все работает, я разные микрухи использовал и все равно работает нормально, только с одной строчкой

tesla88, может и Вам попробовать:

Код
read_time:  

HBusIn RTC_read, $00, [hr]
   
tmp = hr  
GoSub fix_bcd_in
hr1 = tmp  
  Return


Прошу простить, за необразованность
ivan_fd Дата: Ср, 14.01.2015, 12:52  |                                                                                                                Сообщение # 10
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

tesla88,  Вы можете выложить архив с последними Вашими изменениями??? Что бы не комбинировать самому.

MiXaS, если посмотреть дебагером, то видно, что команда BusIn посылает команду start stop и все , что нужно. Наверное перед ней и не нужно посылать Star . Тут все претензии  к компилятору.
MiXaS Дата: Ср, 14.01.2015, 15:11  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

ivan_fd,  спасибо! у меня нет вопросов к компилятору. Работает и ладно. Но информация ценная, спасибо
ЯНДЕКС Дата: 14.01.2015
tesla88 Дата: Ср, 14.01.2015, 17:35  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

MiXaS скорость опроса высокая для полного контроля и удобства просмотра осциллограм.
Вот последняя версия программы , и попутно несколько вопросов - почему в протеусе подтяжка sda и scl идёт от батарейки? как правильно конфигуривовать линию  sda ( trisc.4 = 0 или 1), и если попробовать программный метод реализации i2c, то как правильно его реализовать ?
Кстати дорогие коллеги подскажите какой осциллограф можно взять , чтобы нормально можно было с интерфейсами работать ( дабы видеть и анализировать пачки байтов в разных протоколах)?
Прикрепления: 3318271.zip (74.1 Kb)

Сообщение отредактировал tesla88 - Ср, 14.01.2015, 17:41
ivan_fd Дата: Чт, 15.01.2015, 12:21  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Посмотрел я Ваш проект. Немного подправил код и файл Протеуса.
Цитата tesla88 ()
почему в протеусе подтяжка sda и scl идёт от батарейки?

Как Вы поставили так и стоит. Но я думаю, что лучше ставить не от батарейки.

Код я сделал с программным протоколом, потому, что они почему то в Протоне отличаются по
признакам START Ask NotAsk.... Да и на сайте Протона пишут, что DS1307 не работает с HBUS.

Цитата tesla88 ()
дабы видеть и анализировать пачки байтов в разных протоколах

Для этой цели лучше взять анализатор.
Прикрепления: 2710751.zip (72.6 Kb)

Сообщение отредактировал ivan_fd - Чт, 15.01.2015, 12:23
tesla88 Дата: Чт, 15.01.2015, 17:02  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

Огромное спасибо ivan_fd, все заработало, я и подумать не мог что такое может быть, хотя  c командой hbusout микруха всё же поняла что надо включить тактовые импульсы на выход , даже их частота выставлялась, а вот чтение с микрухи на данной команде я так и не смог организовать,( теперь понятно почему))) ученье свет!!! Буду дальше программу писать).  А не подскажите какой анализатор лучше взять,  а то я их начал искать и целое множество представилось взору , подумываю взять вот это чудо Logic16 USB saleae16 100 М. в общем буду пробовать!

Добавлено (15.01.2015, 17:02)
---------------------------------------------
Ребята подскажите как из переменной типа Float выделить целое значение и записать его в переменную типа byte? не могу найти эту команду.

Сообщение отредактировал tesla88 - Чт, 15.01.2015, 14:03
AndrF Дата: Чт, 15.01.2015, 19:07  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 145
Репутация: 3   ±
Замечания:   ±
На сайте с 03.02.2012

Статус: Offline

Цитата tesla88 ()
Кстати дорогие коллеги подскажите какой осциллограф можно взять , чтобы нормально можно было с интерфейсами работать ( дабы видеть и анализировать пачки байтов в разных протоколах)?

Что-то типа этого. Есть и на другие частоты/деньги.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Проблема с конвертацией результата от ds1307
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск: