BASCOM AVR в вопросах и ответах
- Реклама
Еще вопрос.
Как корректно связать несколько контроллеров по шине 1wire так, чтобы 1 передавал, а другой - только принимал данные?
Вот код у передатчика
Как корректно связать несколько контроллеров по шине 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
В результате передается ерунда - 255 [/code]$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
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 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Второй - для отслеживания нажатия кнопок, с учетом дребезга:
Код: Выделить всё
Config Debounce = 30
...
...
...
...
Debounce PIND.5 , 0 , Regim
...
...
...
...
EndВот, где-то примерно так. Более подробно в хэлпе к Баскому.
Цапу крутить надо!!! Ку или не ку?
Насчет DS1307 - в баскоме есть стандартная библиотека: $lib "ds1307clock.lib"Есть-ли у кого исходники для часов с микросхемой DS1307, или подскажите как связать её с ATtiny2313
А дальше просто управление по 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Строка с временем хранится в 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???
не судите, я учусь -)


