BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
svs39
Встал на лапы
Сообщения: 95
Зарегистрирован: Вс авг 22, 2010 09:23:08

Re: BASCOM AVR в вопросах и ответах

Сообщение svs39 »

dimon-790 писал(а):
svs39 писал(а):при запуске симулятора задержка на строке $regfile = "2313def.dat" минут 20. $crystal = 20000000. Версия 1.11.9.5, мой комп целерон 2.4 МГц. ОС ХР СП2. Потом скорость симулятора приемлема, но вывод на индикатор тоже тормоз- каждый символ строки секунд через 30-50, причем русские не по-русски. Что делать?

например вставить оператор $sim , только не забудь заремить (перед тем как в контроллер заливать).

Спасибо! Вставил в середине текста (по хелпу), а $regfile = "2313def.dat" стал пролетать мгновенно- непонятно...
Bpyh
Родился
Сообщения: 1
Зарегистрирован: Ср сен 08, 2010 12:31:45

Re: BASCOM AVR в вопросах и ответах

Сообщение Bpyh »

Собственно проблема у меня такая когда на LCD отображаю 2 штуки ds18B20 , 2 штуки ds18S20 + PCF8538 (время формата ##:##:##) секунды как бы подтормаживают ,
а если менять задержку Waitms 750 на 250 (150) тормоза исчезают но 1 из 4 температурников пропадает .
Как я понял всё это как раз из за этой задержки так вот как побороть тормоза секунд и проблему с датчиком.


Код: Выделить всё

Do

1wreset                                                     
1wwrite &HCC                                             
1wwrite &H44                                               

[color=red]Waitms 750[/color]

Call Gettime
Text = Bcd(h) + ":" + Bcd(m) + ":" + Bcd(s)

Locate 1 , 1
Lcd Text


    1wverify Dsid1(1)
    1wwrite &HBE
    Sc(1) = 1wread(9)                                       
    If Sc(9) = Crc8(sc(1) , 8) Then

          If Dsid1(1) = 16 Then
          Dg = Decigrades(sc(9))                           
          End If

          If Dsid1(1) = 40 Then
          Dg = Decigrades2(sc(9))                           
          End If

    Ss = Str(dg)
    Ss = Format(ss , " 0.0")
    Locate 2 , 1
    Lcd "1 - " ; Ss ; Chr(0) ;
  End If


    1wverify Dsid2(1)
    1wwrite &HBE
    Sc(1) = 1wread(9)                                       
    If Sc(9) = Crc8(sc(1) , 8) Then
          If Dsid2(1) = 16 Then
          Dg = Decigrades(sc(9))                           
          End If

          If Dsid2(1) = 40 Then
          Dg = Decigrades2(sc(9))                         
          End If
    Ss = Str(dg)
    Ss = Format(ss , " 0.0")
    Locate 2 , 12
    Lcd "2 - " ; Ss ; Chr(0) ;
    End If


    1wverify Dsid3(1)
    1wwrite &HBE
    Sc(1) = 1wread(9)                                       
    If Sc(9) = Crc8(sc(1) , 8) Then
           If Dsid3(1) = 16 Then
          Dg = Decigrades(sc(9))                           
          End If

          If Dsid3(1) = 40 Then
          Dg = Decigrades2(sc(9))                           
          End If
    Ss = Str(dg)
    Ss = Format(ss , " 0.0")
    Locate 3 , 1
    Lcd "3 - " ; Ss ; Chr(0) ;
    End If



    1wverify Dsid4(1)
    1wwrite &HBE
    Sc(1) = 1wread(9)                                       
    If Sc(9) = Crc8(sc(1) , 8) Then
          If Dsid4(1) = 16 Then
          Dg = Decigrades(sc(9))                           
          End If

          If Dsid4(1) = 40 Then
          Dg = Decigrades2(sc(9))                           
          End If
    Ss = Str(dg)
    Ss = Format(ss , " 0.0")
    Locate 3 , 12
    Lcd "4 - " ; Ss ; Chr(0) ;
    End If
Loop


'get time




Sub Gettime
    Dim Dum As Byte
    I2cstart                                                'generate start
    I2cwbyte 160                                            'write addres of PCF8583
    I2cwbyte 2                                              'select second register
    I2cstart                                                'generate repeated start
    I2cwbyte 161                                            'write address for reading info
    I2crbyte S , Ack                                        'read seconds
    I2crbyte M , Ack                                        'read minuts
    I2crbyte H , Ack                                        'read hours
    I2crbyte Yd , Ack                                       'read year and days
    I2crbyte Wm , Nack                                      'read weekday and month
    I2cstop                                                 'generate stop


End Sub






Sub Settime(s As Byte , M As Byte , H As Byte , D As Byte , Month As Byte)
    'values are stored as BCD values so convert the values first
    S = Makebcd(s)                                          'seconds
    M = Makebcd(m)                                          'minuts
    H = Makebcd(h)                                          'hours
    D = Makebcd(d)                                          'days
    Month = Makebcd(month)                                  'months

    I2cstart                                                'generate start
    I2cwbyte 160                                            'write address
    I2cwbyte 0                                              'select control register
    I2cwbyte 8                                              'set year and day bit for masking
    I2cstop                                                 'generate stop


    I2cstart                                                'generate start
    I2cwbyte 160                                            'write mode
    I2cwbyte 2                                              'select seconds Register
    I2cwbyte S                                              'write seconds
    I2cwbyte M                                              'write minuts
    I2cwbyte H                                              'write hours
    I2cwbyte D                                              'write days
    I2cwbyte Month                                          'write months
    I2cstop
End Sub


'DS18b20


Function Decigrades2(byval Sc(9) As Byte)
 Decigrades2 = 0
 Decigrades2 = Makeint(sc(1) , Sc(2))
 Decigrades2 = Decigrades2 * 10
 Decigrades2 = Decigrades2 / 16
End Function


'DS18s20

Function Decigrades(byval Sc(9) As Byte)
Dim Tmp As Byte , T As Integer , T1 As Integer
Tmp = Sc(1) And 1                                           ' 0.1C precision
 If Tmp = 1 Then Decr Sc(1)
 T = Makeint(sc(1) , Sc(2))
 'Print Hex(t)
 'Print T

 T = T * 50                                                 'here we calculate the 1/10 precision like
 T = T - 25                                                 'DS18S20 data sheet
 T1 = Sc(8) - Sc(7)
 T1 = T1 * 100
 T1 = T1 / Sc(8)
 T = T + T1
 Decigrades = T / 10
'As integer, this routine gives T*10, with 1/10 degree precision
End Function


Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Секретный кот »

Bpyh писал(а):а если менять задержку Waitms 750 на 250 (150) тормоза исчезают но 1 из 4 температурников пропадает .

Дык минимальное время преобразования температуры никто не отменял.
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
pavel123
Грызет канифоль
Сообщения: 268
Зарегистрирован: Чт май 17, 2007 09:44:13
Откуда: Украина, г. Кривой Рог

Re: BASCOM AVR в вопросах и ответах

Сообщение pavel123 »

Я так понял, что проблема в том что секунды отображаются неправильно?
Мне кажется, что это связано с общим (сумарным) временем выполнения опроса всех датчиков, получения результатов от всех датчиков, вывода результатов на ЛСД. Т.е. все эти действия занимают больше 1 секунды.
Может быть отказаться от отображения секунд, либо за 1 секундный цикл опрашивать 1 датчик. Тогда секунды пойдут в нормальном режиме, а информация по датчикам будет выводится с некоторым опозданием. Если это не критично... :)
Аватара пользователя
Alex_Megavolt_79
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Re: BASCOM AVR в вопросах и ответах

Сообщение Alex_Megavolt_79 »

Bpyh писал(а):Собственно проблема у меня такая когда на LCD отображаю 2 штуки ds18B20 , 2 штуки ds18S20 + PCF8538 (время формата ##:##:##) секунды как бы подтормаживают ,
а если менять задержку Waitms 750 на 250 (150) тормоза исчезают но 1 из 4 температурников пропадает .
Как я понял всё это как раз из за этой задержки так вот как побороть тормоза секунд и проблему с датчиком.


Или как второй вариант решения вопроса-это уменьшение разрешающей способности датчика, например использовать не 12 бит, а 10 бит. При этом время проебразования температуры будет 187,5 мс. А если перейти на 9 бит, то время преобразования ещё меньше будет - 93,75 мс.
Аватара пользователя
pavel123
Грызет канифоль
Сообщения: 268
Зарегистрирован: Чт май 17, 2007 09:44:13
Откуда: Украина, г. Кривой Рог

Re: BASCOM AVR в вопросах и ответах

Сообщение pavel123 »

Или же секунды на ЛСД вводить по прерыванию от таймера, а все остальное делать в цикле как и когда прийдется. Т.е. по мере поступления данных от датчиков.
Аватара пользователя
Alex_Megavolt_79
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Re: BASCOM AVR в вопросах и ответах

Сообщение Alex_Megavolt_79 »

pavel123 писал(а):Или же секунды на ЛСД вводить по прерыванию от таймера, а все остальное делать в цикле как и когда прийдется. Т.е. по мере поступления данных от датчиков.

А вот так вряд ли получится, так как если во время когда МК будет обращаться к датчику произойдёт прерывание и если не будет запрещены прерывания как рекомендуется в даташите, то вы можете не получить данных с датчика или получите некоректные данные, так как обмен по интерфейсу 1-Wire подразумевает жёсткую привязку по времени.
PB_EXPERT
Потрогал лапой паяльник
Сообщения: 331
Зарегистрирован: Вс мар 30, 2008 14:31:51

Re: BASCOM AVR в вопросах и ответах

Сообщение PB_EXPERT »

Alex_Megavolt_79 писал(а):
pavel123 писал(а):Или же секунды на ЛСД вводить по прерыванию от таймера, а все остальное делать в цикле как и когда прийдется. Т.е. по мере поступления данных от датчиков.

А вот так вряд ли получится, так как если во время когда МК будет обращаться к датчику произойдёт прерывание и если не будет запрещены прерывания как рекомендуется в даташите, то вы можете не получить данных с датчика или получите некоректные данные, так как обмен по интерфейсу 1-Wire подразумевает жёсткую привязку по времени.
Это все относительно.
Как тогда по вашему работает USB термометр? А ведь прерывания от USB происходят довольно часто (каждые 10 мс.)! :)))
И ничего - всё пашет! :)
Аватара пользователя
ВНН
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

Re: BASCOM AVR в вопросах и ответах

Сообщение ВНН »

Bpyh А что Вы хотели считывая 4 датика подряд (грубо 4 сек к PCF8538 нет обращения) разделите обращение к DS18x20 во времени
и проблема исчезнет.
Удачи.
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Аватара пользователя
Alex_Megavolt_79
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Re: BASCOM AVR в вопросах и ответах

Сообщение Alex_Megavolt_79 »

А у меня вопрос такого плана. Как можно установить или сбросить любой необходимый мне бит в переменной?
PB_EXPERT
Потрогал лапой паяльник
Сообщения: 331
Зарегистрирован: Вс мар 30, 2008 14:31:51

Re: BASCOM AVR в вопросах и ответах

Сообщение PB_EXPERT »

Alex_Megavolt_79 писал(а):А у меня вопрос такого плана. Как можно установить или сбросить любой необходимый мне бит в переменной?

Вот так

Код: Выделить всё

Peremennaa.0 = 1                                            ' Установка нулего бита
Peremennaa.7 = 0                                            ' Сброс седьмого бита
Аватара пользователя
Alex_Megavolt_79
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Re: BASCOM AVR в вопросах и ответах

Сообщение Alex_Megavolt_79 »

Спасибо. Очень просто оказывается, а то я уже хотел как в асме накладывать маску.
Аватара пользователя
max50
Мучитель микросхем
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение max50 »

Код: Выделить всё

Dim Swfunc As Byte                                          'переменная переключения функций TDA8425 

If Swfunc.5 = 1 Then                                        'если бит 5 Swfunc = 1, то
Reset Mute                                                  'выключить режим Mute
Swfunc.5 = Not Swfunc.5                                     'значение бита 5 Swfunc изменить на противоположное
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
dhouse
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Re: BASCOM AVR в вопросах и ответах

Сообщение dhouse »

Кто-нибудь встречал (желательно на Ваsсом) проект на музыкальную миди-клавиатуру (многоголосую)? Подобный проект я нашел на PIC-контроллере http://electroavto.narod.ru/midikeyboard.html. Но PIC-ами я не дружу, а с AVR пытаюсь разобраться.
dhouse
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Re: BASCOM AVR в вопросах и ответах

Сообщение dhouse »

Кстати, нашел еще один проект Midi: http://b612.h16.ru/pianino.htm, но тоже на PIC :cry:
Radan
Мучитель микросхем
Сообщения: 465
Зарегистрирован: Ср июн 21, 2006 08:24:32
Откуда: Лисичанск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Radan »

В приложении на Васике. МК правда устарел... Переведёте на новый, делитесь.
Вложения
MIDI.RAR
MIDI
(272.33 КБ) 253 скачивания
dhouse
Встал на лапы
Сообщения: 84
Зарегистрирован: Пт апр 16, 2010 12:30:03

Re: BASCOM AVR в вопросах и ответах

Сообщение dhouse »

Спасибо, попробую что- то понять...
Аватара пользователя
Alex_Megavolt_79
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Re: BASCOM AVR в вопросах и ответах

Сообщение Alex_Megavolt_79 »

Товарищи усатые и хвостатые. Выручайте, опять нужна помощь. Мне нужно на меге16 реализовать 5-ти, а лучше 6-ти канальный шим. Мега16 допускает только 4 и то при использовании всех трёх таймеров. А они мне нужны для другого дела. Скажу сразу для чего мне нужно, хочу сварганить УМЗЧ для ПК с реобасом. А если есть исходник на васике и его выложите, для обучения, то буду очень признателен. Только сразу не отправляйте к шим по шине I2C, например фирмы maxim, их у нас в продаже нет.
Аватара пользователя
ВНН
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

Re: BASCOM AVR в вопросах и ответах

Сообщение ВНН »

Alex_Megavolt_79Посмотри Светодиодный диммер http://bascom.at.ua/publ/1-1-0-9 Реализовоно софтово 8 каналов.
Удачи
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Аватара пользователя
Alex_Megavolt_79
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Re: BASCOM AVR в вопросах и ответах

Сообщение Alex_Megavolt_79 »

ВНН писал(а):Alex_Megavolt_79Посмотри Светодиодный диммер http://bascom.at.ua/publ/1-1-0-9 Реализовоно софтово 8 каналов.
Удачи

Большое спасибо. Принцип понял буду пробовать. :))
Ответить

Вернуться в «AVR»