BASCOM AVR в вопросах и ответах
Еще вопрос.
Как корректно связать несколько контроллеров по шине 1wire так, чтобы 1 передавал, а другой - только принимал данные?
Вот код у передатчика
а вот - у приемника
В результате передается ерунда - 255 [/code]
Как корректно связать несколько контроллеров по шине 1wire так, чтобы 1 передавал, а другой - только принимал данные?
Вот код у передатчика
$regfile = "2313def.dat"
$crystal = 4000000
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 'default use 10 for the SW stack
$framesize = 40 'default use 40 for the frame space
Config 1wire = Portd.0
Dim Rpm As Word
For Rpm = 0 to 250
1wwrite Rpm
Waitms 500
Next
Loop
End
а вот - у приемника
$regfile = "M8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
Config 1wire = Portd.0
Dim Rpm As Word
Config 1wire = Portd.0
Do
1wreset
Rpm() = 1wread()
Lcd "RPM:" ; Rpm ;
Loop
End
В результате передается ерунда - 255 [/code]
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
fabrique писал(а):В результате передается ерунда - 255
Абсолютно закономерно она передаётся
Так как все баскомовские функции работы с 1-wire предназначены для эмуляции мастер-устройства, а для связи двух девайсов один из них должен быть слейвом.
Даже остановленные часы два раза в сутки показывают правильное время.
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
Если кнопок не более двух, то их лучше "вешать" на внешние прерывания INT0 и INT1. А там можно настроить как хочешь ( подробнее смотри хелп к Баскому), хоть на срабатывание при замыкании на землю, хоть по нарастающему фронту, хоть по ниспадающему, хоть при любой смене сигнала. Если больше кнопок, то лучше их замыкать на землю, но тогда вывод порта, куда подключена кнопка должен быть с подтяжкой на +5 вольт, чтобы МК не ошибся, что у него конкретно на выводе порта - единица или ноль. Рулить кнопками лучше при помощи директивы Debounce - там сразу задается задержка от дребезга контактов (Config Debounce = 30 - задержка 30мс).
А это уже смотря чем управлять....
ну и соответственно для управления чем либо на вывод контроллеру что лучше слать??? "+" ???
А это уже смотря чем управлять....

Цапу крутить надо!!! Ку или не ку?
- константин_KoSS_89
- Вымогатель припоя
- Сообщения: 602
- Зарегистрирован: Пн дек 29, 2008 01:40:28
- Откуда: (Украина, г. Стаханов, Луганская обл.) теперь Кемерово :)
Есть-ли у кого исходники для часов с микросхемой DS1307, или подскажите как связать её с ATtiny2313 нужно выводить часы и минуты на семисигментный LED индикатор, читал на DS1307 даташит(про вывод времени), ничего непонял. Если есть хот приметивный текст программы, прошу скинуть в личку, очень нужно
Зрание спасибо!
Зрание спасибо!
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
I_ivi писал(а):Igor_67
а можно какой нибудь пример кода?
Можно и пример. Первый - для управления кнопками по внешним прерываниям:
Код: Выделить всё
On Int0 Minus 'при возникновении прерывания INT0, переход на метку Minus
Enable Int0
On Int1 Plus 'при возникновении прерывания INT1, переход на метку Plus
Enable Int1
Enable InterruptsПотом, где-то в конце программы, по меткам Minus и Plus ставим обработчики прерываний, т.е. подпрограмы, обслуживающие нажатие кнопок (+ и -).
Второй - для отслеживания нажатия кнопок, с учетом дребезга:
Код: Выделить всё
Config Debounce = 30
...
...
...
...
Debounce PIND.5 , 0 , Regim
...
...
...
...
EndВначале конфигурируем задержку на 30 мс. Потом где то в программе вызываем опрос кнопки PIND.5, например. Дальше - "0" - это как Debounce будет реагировать на нажатие ( в данном случае, сработает, если на PIND.5 появится "0". можно и "1" поставить. тогда будет срабатывать при замыкании на +). Затем идет метка Regim, на которую надо перейти по наступлению события (в данном случае - по замыкании PIND.5 на "землю".
Вот, где-то примерно так. Более подробно в хэлпе к Баскому.
Цапу крутить надо!!! Ку или не ку?
Есть-ли у кого исходники для часов с микросхемой DS1307, или подскажите как связать её с ATtiny2313
Насчет DS1307 - в баскоме есть стандартная библиотека: $lib "ds1307clock.lib"
А дальше просто управление по I2C.
Код: Выделить всё
Config Clock = user
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Dim Weekday As Byte
Time$ = "12:00:00"
Date$ = "12-05-09"
Do
Cls
Lcd ; Time$ ; " " ; Date$
Waitms 500
Loop
Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 4
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
ReturnТолько здесь вывод на LCD, но принцип, думаю ясен...
Строка с временем хранится в Time$, строка с датой - в Date$
Цапу крутить надо!!! Ку или не ку?
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
- kkozyrev
- Открыл глаза
- Сообщения: 67
- Зарегистрирован: Пт дек 11, 2009 02:40:44
- Откуда: C-Петербург
- Контактная информация:
мда
все-равно робота на mega32 делаю.... главное что с ней работает
а вот еще вопросик
сработало прерывание int0 программа ушла на участок обработки данного прерывания, но в процессе обработки прерывания int0 срабатывает прерывание int1... что произойдет? дообработка int0 или сразу переход на обработку int1???
все-равно робота на mega32 делаю.... главное что с ней работает
а вот еще вопросик
сработало прерывание int0 программа ушла на участок обработки данного прерывания, но в процессе обработки прерывания int0 срабатывает прерывание int1... что произойдет? дообработка int0 или сразу переход на обработку int1???
не судите, я учусь -)