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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

Сообщение Gordon Shumway »

edm2007 писал(а):
Gordon Shumway писал(а):Вот при таком раскладе при нажатии на кнопку выводится всякая чушь


Здравствуйте, Алексей. А что значит "чушь"? Вообще на экране или именно со значениями?


Если не нажимать на кнопку, то все ок. Если нажали на кнопку - сначала выводится картинка (видно), а потом на экран вылезают
цифры, кавычки и прочи мусор. Он висит пять секунд, потом возвращается нормальный вид - основной экран с показаниями температуры.

Вывод картинок отключал - без изменений... Завтра смогу весь код выложить и фотки того, что получается.

Если убрать прерывания и сделать if pinX.X=0 then
то глюка не наблюдается.
Последний раз редактировалось Gordon Shumway Чт июн 02, 2011 21:39:00, всего редактировалось 1 раз.
С уважением,
Алексей.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Gordon Shumway писал(а):Завтра смогу весь код выложить и фотки того, что получается.


Вот это будет замечательно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

Сообщение Gordon Shumway »

edm2007 писал(а):
Gordon Shumway писал(а):Завтра смогу весь код выложить и фотки того, что получается.


Вот это будет замечательно.


Вот:

$regfile = "m8def.dat"
$crystal = 1000000

$hwstack = 32
$swstack = 8
$framesize = 100

Config Portd.4 = Output
Portd.4 = 0

Config Portb.0 = Output 'D/C (pin 4)
D3310dc Alias Portb.0

Config Portd.3 = Output 'SCE (pin 5)
D3310ce Alias Portd.3

Config Portd.6 = Output 'Reset (pin 8 )
D3310re Alias Portd.6

'Config Pind.2 = Input

Config Int0 = Falling
On Int0 Maxmin

Config 1wire = Portb.7

Dim A As Bit
Dim Byte0 As Byte , Byte1 As Byte 'читать датчики
Dim Byte2 As Byte , Byte3 As Byte

Dim T1 As Single , T2 As Single
Dim T3 As Single , T4 As Single

Dim 1sign As String * 1
Dim 1signmax As String * 1
Dim 1signmin As String * 1

Dim 2sign As String * 1
Dim 2signmax As String * 1
Dim 2signmin As String * 1

Dim 1tmax As Single , 1tmin As Single
Dim 2tmax As Single , 2tmin As Single

Dim 1temper As String * 7
Dim 1tempermax As String * 10
Dim 1tempermin As String * 10

Dim 2temper As String * 7
Dim 2tempermax As String * 10
Dim 2tempermin As String * 10

Enable Interrupts
Enable Int0

'конфигурируем SPI в программном режиме. SCLK (pin 2) - PORTD.0; SDA (pin 3) - PORTD.1;
Config Spi = Soft , Din = Portb.1 , Dout = Portd.1 , Ss = None , Clock = Portd.0

'Initialise Spi
Spiinit

$include "3310init.bas"

'Initialise the display
Call D3310reset
Call D3310init
Call D3310clear

Restore Bmp1 'D3310Bmp1 is the label name for the first bmp
Call D3310bmpout

A = 0

Do

'If Pind.2 = 0 Then Gosub Maxmin

1wreset

1wwrite &HCC ' Выдаем команду чтения ПЗУ
1wwrite &H44 ' Запуск измерения

Waitms 750 ' Ждем окончания преобразования

1wreset
1wwrite &HCC
1wwrite &HBE ' Команда чтения ОЗУ датчика


Byte0 = 1wread() ' Читаем нулевой байт

Byte1 = 1wread()

Waitms 750

1wreset Pinc , 5

1wwrite &HCC , 1 , Pinc , 5 ' Выдаем команду чтения ПЗУ
1wwrite &H44 , 1 , Pinc , 5 ' Запуск измерения

Waitms 750 ' Ждем окончания преобразования
1wreset Pinc , 5

1wwrite &HCC , 1 , Pinc , 5
1wwrite &HBE , 1 , Pinc , 5 ' Команда чтения ОЗУ датчика
Byte2 = 1wread(1 , Pinc , 5) ' Читаем нулевой байт
Byte3 = 1wread(1 , Pinc , 5) ' Читаем первый байт



If Byte1 > 248 Then ' Проверка на отрицательность температуры
Byte0 = &HFF - Byte0
Byte1 = &HFF - Byte1

Else
1sign = "+"
End If

T1 = Byte0 / 16 ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)
T2 = Byte1 * 16 ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)

T1 = T1 + T2

If Byte1 > 248 Then
T1 = T1 + 1
T1 = T1 * -1
1sign = ""
End If

If 1sign = "+" And T1 = 0 Then ' убираем знак "+" с нулевой температуры
1sign = " "
End If

If A = 0 Then
1tmax = T1
1tmin = T1

End If

If T1 > 1tmax Then 1tmax = T1
If T1 < 1tmin Then 1tmin = T1
If 1tmax > 0 Then 1signmax = "+"
If 1tmax <= 0 Then 1signmax = ""
If 1tmin > 0 Then 1signmin = "+"
If 1tmin <= 0 Then 1signmin = ""

1temper = Fusing(t1 , "#.#")
1temper = 1sign + 1temper
1temper = 1temper + "_C"

1tempermax = Fusing(1tmax , "#.#")
1tempermax = 1signmax + 1tempermax
1tempermax = 1tempermax + "_C"


1tempermin = Fusing(1tmin , "#.#")
1tempermin = 1signmin + 1tempermin
1tempermin = 1tempermin + "_C"


'расчет показаний второго датчика

If Byte3 > 248 Then ' Проверка на отрицательность температуры
Byte2 = &HFF - Byte0
Byte3 = &HFF - Byte1

Else
2sign = "+"
End If

T3 = Byte2 / 16
T4 = Byte3 * 16

T3 = T3 + T4

If Byte3 > 248 Then
T3 = T3 + 1
T3 = T3 * -1
2sign = ""
End If

If 2sign = "+" And T3 = 0 Then ' убираем знак "+" с нулевой температуры
2sign = " "
End If

If A = 0 Then
2tmax = T3
2tmin = T3
A = 1
End If

If T3 > 2tmax Then 2tmax = T3
If T3 < 2tmin Then 2tmin = T3
If 2tmax > 0 Then 2signmax = "+"
If 2tmax <= 0 Then 2signmax = ""
If 2tmin > 0 Then 2signmin = "+"
If 2tmin <= 0 Then 2signmin = ""

2temper = Fusing(t3 , "#.#")
2temper = 2sign + 2temper
2temper = 2temper + "_C"

2tempermax = Fusing(2tmax , "#.#")
2tempermax = 2signmax + 2tempermax
2tempermax = 2tempermax + "_C"

2tempermin = Fusing(2tmin , "#.#")
2tempermin = 2signmin + 2tempermin
2tempermin = 2tempermin + "_C"



Call D3310position(6 , 1)
Call D3310print(1temper)

Call D3310position(6 , 4)
Call D3310print(2temper)

Wait 1

Loop

End

Maxmin:

Call D3310clear

Restore Bmp2
Call D3310bmpout

Call D3310position(6 , 1)
Call D3310print(1tempermax)

Call D3310position(6 , 2)
Call D3310print(1tempermin)

Call D3310position(6 , 4)
Call D3310print(2tempermax )

Call D3310position(6 , 5)
Call D3310print(2tempermin)

Wait 5

Call D3310clear

Restore Bmp1
Call D3310bmpout

Return

$include "3310end.bas"
$include "bmp1.bas"
$include "bmp2.bas"


Основной Экран:

1.jpg
(72.94 КБ) 1123 скачивания


Изображение

Жмем кнопку:

2.jpg
(76.88 КБ) 1327 скачиваний


Изображение

Через пять сек. возврат в основной экран. Там все нормально.

Если убрать прерывания:

3.jpg
(78.86 КБ) 1585 скачиваний


Изображение


Я использовал подправленный файл 3310end.bas из библиотеки - закомментировал все неиспользуемые символы и буквы, иначе в мегу8 не помещается.

Похоже с чушью я справился - убрал лишние инициализации дисплея.
Теперь просто не выводятся значения максимумов и минимумов. Если убратьпрерывания - выводятся нормально.

Вот такая закрутка...
Вложения
3310end.rar
измененный 3310end.bas
(2.85 КБ) 219 скачиваний
3310_library.rar
(11.12 КБ) 194 скачивания
С уважением,
Алексей.
AVRDaemon
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб дек 06, 2008 13:48:59

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

Сообщение AVRDaemon »

А LCD графический от чего? можно узнать?
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

Сообщение Gordon Shumway »

AVRDaemon писал(а):А LCD графический от чего? можно узнать?


От мобильника nokia3310. Нашел по 55 рублей, грех не использовать.
С уважением,
Алексей.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Получается что разница только в том, что по gosub он уходит четко в начале, а прерывание может прервать выполнение где угодно... Только где оно мешает... :(
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

Сообщение Gordon Shumway »

edm2007 писал(а):Получается что разница только в том, что по gosub он уходит четко в начале, а прерывание может прервать выполнение где угодно... Только где оно мешает... :(


Как выяснилось, вариант без прерывания тоже глючит - иногда вместо картинки чушь все-таки вылезает. Символы всякие на весь экран, частично портится картинка и т.д.

Сейчас убрал все кнопки, сделал автоперемену через 3 секунды - все выводится отлично....

И куда ж копать ?.... :(
С уважением,
Алексей.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Вы можете еще скинуть bmp1 и bmp2, хоть в протеусе накидаю...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

При беглом просмотре (может где и не заметил):
Прерывание может нарушить вообще процес общения с 1wire, по-этому при обращении к датчикам, лучше отключать прерывание. Далее в прерывании выводите на экран

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

Call D3310position(6 , 1)
Call D3310print(1tempermax)

Call D3310position(6 , 2)
Call D3310print(1tempermin)

Call D3310position(6 , 4)
Call D3310print(2tempermax )

Call D3310position(6 , 5)
Call D3310print(2tempermin)

Wait 5

А если на кнопку нажали в момент выполнения какой-либо строчки?

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

2temper = Fusing(t3 , "#.#")
2temper = 2sign + 2temper
2temper = 2temper + "_C"

2tempermax = Fusing(2tmax , "#.#")
2tempermax = 2signmax + 2tempermax
2tempermax = 2tempermax + "_C"

2tempermin = Fusing(2tmin , "#.#")
2tempermin = 2signmin + 2tempermin
2tempermin = 2tempermin + "_C"
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

kip96 писал(а):по-этому при обращении к датчикам, лучше отключать прерывание.


Это само собой, мешать обмену вообще ничего не должно. Но Алексей вроде говорил что отключал прерывания... А вот про второе это да, тоже об этом подумал когда речь шла про то, что по gosub все работает... Но сейчас выясняется что и так тоже плохо.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

отключаем прерывание, выводим на экран, включаем.
При опросе датчиков, вместо Waitms 750 воспользуйтесь Bitwait Portb.7 , Set ( датчики то, на разных портах). Преобразование происходит быстрей, чем 750 милисекунд.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

edm2007 писал(а):Но Алексей вроде говорил что отключал прерывания...

Чего-та в коде я не увидел. :dont_know:
edm2007 писал(а):хоть в протеусе накидаю...

Не плохо-бы было :)) ( я подожду :oops: )
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Точнее так: "говорил что пробовал отключать". :) Для протеуса файлов картинок не хватает...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

Сообщение Gordon Shumway »

edm2007 писал(а):Точнее так: "говорил что пробовал отключать". :)


Пробовал. Сейчас я вообще сделал так:


do

disable int0
disable interrupts

программа

вывод на экран

enable interrupts
enable int0

wait 1

loop


То есть включаю прерывания только на 1 секунду, пока wait 1 идет.
Такая же ерунда поолучается...

kip96, спасибо, сейчас попробую.
С уважением,
Алексей.
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

Сообщение Gordon Shumway »

edm2007 писал(а):Вы можете еще скинуть bmp1 и bmp2, хоть в протеусе накидаю...


Вот они. Я их немного перерисовал. Покрасивее стало.

Спасибо, edm2007 !
Вложения
bmp12-n.rar
Перезалил! Там была ошибка с метками.
(699 байт) 180 скачиваний
С уважением,
Алексей.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Минут 5 понять не мог, почему он при компиляции ругается. Пока bmp1 и bmp2 не открыл. Там в заголовках-то 11 и 22. Вы-то в коде поправили наверняка. :) Теперь по делу: нарисовал в протеусе, и в обычном режиме все работает, но только почему-то при уходе в отрицательную температуру картинка бьется и что-то типа -4096 С. Вы не проверяли в холодильнике? И при нажатии на кнопку да, иногда мусор а иногда просто тишина...

Комментарий к файлу: Перезалил! Там была ошибка с метками.


Ага. А я только сейчас увидел. Ну да там поправить не проблема была. :)

Вот проект для 7.7. Если нужна модель дисплея то скину. А то в протеусе нет 3310...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Gordon Shumway
Мучитель микросхем
Сообщения: 485
Зарегистрирован: Пн авг 20, 2007 21:35:45
Откуда: Мытищи, Московская область
Контактная информация:

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

Сообщение Gordon Shumway »

edm2007 писал(а): Теперь по делу: нарисовал в протеусе, и в обычном режиме все работает, но только почему-то при уходе в отрицательную температуру картинка бьется и что-то типа -4096 С. Вы не проверяли в холодильнике? И при нажатии на кнопку да, иногда мусор а иногда просто тишина...

Вот проект для 7.7. Если нужна модель дисплея то скину. А то в протеусе нет 3310...


В выходные попробую (если моя мелкая позволит), в том числе и с холодильником, а то отрицательные температуры проверить было негде.

Про протеус - я пока с ним не работал, но, видимо, пора осваивать. :))

Спасибо за помощь !
С уважением,
Алексей.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Да пока не за что. :)

Если что, то вот Proteus Professional 7.7 SP2

А это Модель дисплея NOKIA3310. Ее в Proteus нет. Надо из папок архива скопировать в соответствующие папки Proteus.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Да, забыл совсем, при gosub действительно переходит и отображает нормально. Только на "домашнем" термометре при уходе в минус все нормально, а вот на "уличном" как только 0С и ниже, тут же бъется картинка с непонятными показаниями в итоге.

То бишь бьется только УЛИЧНЫЙ термометр, и именно он (по крайней мере в протеусе) разносит картинку и показания в хлам. А ДОМАШНИЙ отображает отрицательную нормально. Только знак "-" надо добавить.... Алексей, а почему Вы не посадили на один пин оба датчика? Так же проще...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
AVRDaemon
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб дек 06, 2008 13:48:59

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

Сообщение AVRDaemon »

Привет еще раз)
хочу сваять время в пути для бортовика, таймер1 занят тахометром, таймер0 свободен, можно ли на нем сделать время в пути?
Ответить

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