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

Обсуждаем контроллеры компании Atmel.
Dimaska
Родился
Сообщения: 2
Зарегистрирован: Пн мар 08, 2010 16:03:15

Сообщение Dimaska »

Привет всем !
Тут на досуге накидал код для включения освещения в нужное время. Использовал то что было под рукой, вроде как работает всё, да не уверен в правильности написания работы с EEPROM.

Cильно не бейте работаю с бейсиком 5 дней . Знание других языков равно нулю


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

$regfile = "m32def.dat"
$crystal = 8000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40


Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7


Config Lcd = 16 * 2
Cursor Off

Config Sda = Portc.1
Config Scl = Portc.0


Const Ds1307w = &HD0
Const Ds1307r = &HD1

Config Portd = Output : Portd = &B00000000


Config Clock = User


Config Date = Dmy , Separator = .


Dim H As Byte
Dim M As Byte



'===================EEPROM
$eepromhex
$eeprom
Timer_1_h:

Data 09    ' Начальные данные для таймера (часы)

Timer_1_m:

Data 57     ' Начальные данные для таймера (Минуты)


$data
'========



Time$ = "09:55:00"
Date$ = "04.03.10"


Readeeprom H , Timer_1_h
Readeeprom M , Timer_1_m


Do

If H = _hour And M = _min Then
Portd.5 = 1
End If


Locate 1 , 1
Lcd "Timer1 = " ; H ; ":" ; M
Locate 2 , 1
Lcd Time$

Loop


' Benutzer definierte Routinen die von der datetime.lib im BASCOM genutzt werden
Dim Weekday As Byte
Getdatetime:
  I2cstart                                                  ' Start
  I2cwbyte Ds1307w                                          ' DS1307 schreiben
  I2cwbyte 0                                                ' DS1307 Adresszeiger auf 0 stellen

  I2cstart                                                  ' Start
  I2cwbyte Ds1307r                                          ' DS1307 lesen (ab vorher eingestellter Adresse 0)
  I2crbyte _sec , Ack                                       ' Sekunden
  I2crbyte _min , Ack                                       ' Minuten
  I2crbyte _hour , Ack                                      ' Stunden
  I2crbyte Weekday , Ack                                    ' Wochentag (in Dummy gelesen da von date$/time$ nicht genutzt)
  I2crbyte _day , Ack                                       ' Tag
  I2crbyte _month , Ack                                     ' Monat
  I2crbyte _year , Nack                                     ' Jahr
  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                                                  ' Start
  I2cwbyte Ds1307w                                          ' DS1307 schreiben
  I2cwbyte 4                                                ' DS1307 Adresszeiger auf 4 (Byte 5) stellen
  I2cwbyte _day                                             ' Tag schreiben
  I2cwbyte _month                                           ' Monat schreiben
  I2cwbyte _year                                            ' Jahr schreiben
  I2cstop
Return

Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart                                                  ' Start
  I2cwbyte Ds1307w                                          ' DS1307 schreiben
  I2cwbyte 0                                                ' DS1307 Adresszeiger auf 0 stellen
  I2cwbyte _sec                                             ' Sekunden schreiben
  I2cwbyte _min                                             ' Minuten schreiben
  I2cwbyte _hour                                            ' Stunden schreiben
  I2cstop
Return
Аватара пользователя
suslogon
Друг Кота
Сообщения: 10693
Зарегистрирован: Пн июл 14, 2008 21:28:00
Откуда: Москва
Контактная информация:

Сообщение suslogon »

а зачем тебе внешние часы реального времени, если они есть в меге32 встроенные?
Ищу тиратрон ТХИ1-2000/4, ГРИ ИН-23, ФЭУ-103; 134; 135, 138, 155, 157, лампу ИСШ-7.
Любые ГИС серий 203, 225, 233, 244, 250, 296, 801, 838 в любом состоянии. Компоненты и детали от миниатюрных твердотельных лазеров.
Dimaska
Родился
Сообщения: 2
Зарегистрирован: Пн мар 08, 2010 16:03:15

Сообщение Dimaska »

Что было под рукой то и запихал !
я РАНЬШЕ ПРОСТО СОБИРАЛ УСТРОЙСТВА С ГОТОВЫМИ ПРОШИВКАМИ вот и напихал
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Сообщение kip96 »

одна собственно данные, другая тактирование.

А подругому, даже и не получится.
Спасибо! Буду юзать. :beer:
DossJ
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс апр 19, 2009 11:11:02

Сообщение DossJ »

Помогите пожалуйста собрать две программы в одну или подскажите как заставить вызывать фунцию

первая прошивка

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

$regfile = "m16def.dat"                                     ' specify the used micro
$crystal = 8000000                                          ' used crystal frequency
$baud = 9600                                                ' use baud rate
$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 Portc.0 = Output
Config Portc.1 = Input
Dim X As String * 10

$lib "mcsbyteint.lbx"                                       ' use optional lib since we use only bytes

'configure PS2 AT pins
Enable Interrupts    ' you need to turn on interrupts yourself since an INT is used

'---------- keyboard-----------------------------------------
Config Atemu = Int1 , Data = Pind.3 , Clock = Pinb.0
'                 ^---------- used interrupt
'                              ^---------- pin connected to DATA
'                                       ^-- pin connected to clock
'Note that the DATA must be connected to the used interrupt pin
'Waitms 500                                                  ' optional delay
'---------- init keyboard-------------------------------------
rcall _AT_KBD_INIT
Print "Press t for test, and set focus to the editor window"
Print "send key test"
Dim Key2 As Byte , Key As Byte
Do
      Waitms 1500
      Sendscankbd Mark                                      ' send a scan code
      Print "Press t for test, and set focus to the editor window"
Loop
Print Hex(key)
Mark:                                                       ' send mark
Data 12 , &H3A , &HF0 , &H3A , &H1C , &HF0 , &H1C , &H2D , &HF0 , &H2D , &H42 , &HF0 , &H42


вторая:

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

$regfile = "m16def.dat"
$crystal = 8000000
Declare Sub Senden
Declare Sub Senden0
Declare Sub Senden1
Dim X As Byte
Dim Y As Byte
Dim Z As Byte
Dim Send As Byte
Dim Parity As Byte
$lib "mcsbyteint.lbx"
$lib "at_emulator.lbx"
Enable Interrupts
Daten Alias Pina.0
Datenport Alias Ddra.0
Clock Alias Pinb.0
Clockport Alias Ddra.1
For Y = 0 To 29                                             ' sendet "hallo AVR"
  Send = Lookup(y , Dat)
  Call Senden
Next
Do : Loop                                                   'endlosschleife
'#########################  Unterprogramme #################################
Senden:
Do
Loop Until Clock = 1 And Daten = 1                          'warte bis PC empfangsbereit
'Startbit (immer 0)
Call Senden0
'8 Datenbists
For X = 0 To 7
  If Send.x = 0 Then                                        '0 Senden
    Call Senden0
  Else                                                      '1 Senden
    Call Senden1
  End If
Next
'parity
If Parity.0 = 0 Then
  Call Senden0
Else                                                        '1 Senden
  Call Senden1
End If
'Stopbit (immer 1)
Call Senden1
Sendscankbd Mark
Parity = 0

Return


Senden0:                                                    'sendet Eine 0 U "ber PS2"
  Datenport = 1                                             'Daten auf Output
  Daten = 0                                                 'Daten auf low
  Clockport = 1                                             'Clock auf Output
  Clock = 0                                                 'Clock auf 0
  Waitus 30                                                 '30µS warten
  Clockport = 0                                             'Clock auf Input
  Waitus 5                                                  '5 µS warten
  Datenport = 0                                             'Daten auf Input
Return

Senden1:                                                    'sendet Eine 1 U "ber PS2"
  Clockport = 1                                             'Clock auf Output
  Clock = 0                                                 'Clock auf 0
  Waitus 30                                                 '30µS warten
  Clockport = 0                                             'Clock auf Input
  Incr Parity
Return

Dat:
Data &H33 , &HF0 , &H33 , &H1C , &HF0 , &H1C , &H4B , &HF0
Data &H4B , &H4B , &HF0 , &H4B , &H44 , &HF0 , &H44 , &H29
Data &HF0 , &H29 , &H12 , &H1C , &HF0 , &H1C , &H2A , &HF0
Data &H2A , &H2D , &HF0 , &H2D , &HF0 , &H12


Необходимо перенести функцию Sendscankbd из первой прошивки во вторую. Врознь они компилируются и работают, а если хочеш перенести из код из одной в другую то начинаются ошибки кучей лезть, и в основном ошибки типа не найден вызов процедуры _такой_то: .Процедуры в подключаемых библиотеках есть но почему оно их не видит вопрос.

P.S: это пример реализации ps/2 клавиатуры, в первой прошивке работает отправка сканкодов которые нормально обрабатываются компом но нету начельной инициализации на уровне биоса и виндовса, а во второй - есть начальная инициализация но нету отправки сканкодов. Если у когото есть пример реализации лутьше поделитесь пожалуйста!
Вложения
lib.zip
библиотеки для работы с ps/2 на bascom, нужны для первой прошивки
(6.24 КБ) 443 скачивания
Si-Soft
Родился
Сообщения: 8
Зарегистрирован: Пт мар 12, 2010 11:44:19
Откуда: Красноярск

Сообщение Si-Soft »

Помогите. Бьюсь уже несколько часов.
Читаю ROM-память iButton все нормально, читается. Хочу прочитать весь ключ нифига не работает.
В чем ошибка

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

$regfile = "m8def.dat"                                      
$crystal = 8000000                                         
Config 1wire = Portb.7                                     

Dim Ar(16) As Byte , I As Byte

Do
1wreset                                                 
1wwrite &HCC                                           
Ar(1) = 1wread(16)                                       
Print "Number";
For I = 1 To 16
    Print Hex(ar(i));
Next
Waitms 1000
Loop
End
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

Si-Soft писал(а):Хочу прочитать весь ключ нифига не работает.
В чем ошибка

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

1wreset                                                 
1wwrite &HCC                                           
Ar(1) = 1wread(16)                                       

В этом коде я вообще не вижу команды чтения, так что неудивительно :)))
Даже остановленные часы два раза в сутки показывают правильное время.
Si-Soft
Родился
Сообщения: 8
Зарегистрирован: Пт мар 12, 2010 11:44:19
Откуда: Красноярск

Сообщение Si-Soft »

А какая тогда должна быть команда чтения?
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Команда чтения по интерфейсу 1 wire: 1wread. Она у тебя присутствует, но ничего не выполняет. По оператору print она должна тебе печатать код ключа, но куда она его тебе будет печатать? Для выполнения оператора print должен быть или подключен или сэмулирован терминал. Тогда уж лучше прицепить LCD и выводить на него то, что прочитано с шины 1wire. А смотреть все можно в Proteus! 8)
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
suslogon
Друг Кота
Сообщения: 10693
Зарегистрирован: Пн июл 14, 2008 21:28:00
Откуда: Москва
Контактная информация:

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

Сообщение suslogon »

:cry: жаль что мне никто помочь не может
Ищу тиратрон ТХИ1-2000/4, ГРИ ИН-23, ФЭУ-103; 134; 135, 138, 155, 157, лампу ИСШ-7.
Любые ГИС серий 203, 225, 233, 244, 250, 296, 801, 838 в любом состоянии. Компоненты и детали от миниатюрных твердотельных лазеров.
Si-Soft
Родился
Сообщения: 8
Зарегистрирован: Пт мар 12, 2010 11:44:19
Откуда: Красноярск

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

Сообщение Si-Soft »

Нет. Команда настройки usart'a у меня есть, просто забыл написать.
Когда я делаю так,

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

$regfile = "m8def.dat"                                     
$crystal = 8000000
$baud = 19200                                         
Config 1wire = Portb.7                                     
Dim Ar(8) As Byte , I As Byte
Do
1wreset                                                 
1wwrite &H33             'Команда для чтения rom                             
Ar(1) = 1wread(8)                                       
Print "Number";
For I = 1 To 8
    Print Hex(ar(i));
Next
Waitms 1000
Loop
End
то у меня получатся читать rom. В терменале получаю значение 01B927BB00000000.

Ведь получив команду &HCC устройство должно отправлять весь ключ, а я должен его прочитать, но читать не получается идут одни FFFFFFF......
Si-Soft
Родился
Сообщения: 8
Зарегистрирован: Пт мар 12, 2010 11:44:19
Откуда: Красноярск

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

Сообщение Si-Soft »

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

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

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

Команда &HCC – SKIP ROM, а &H33 – READ ROM. Делайте выводы....

P.S. USART здесь вообще не при делах :dont_know:
Даже остановленные часы два раза в сутки показывают правильное время.
Si-Soft
Родился
Сообщения: 8
Зарегистрирован: Пт мар 12, 2010 11:44:19
Откуда: Красноярск

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

Сообщение Si-Soft »

Usart мне нужен для того чтобы видеть какие значения принимают переменные.
Все понял, ведь 8 байт это и есть 64 бита. :) И достаточно отправлять команду &H33.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

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

Там кроме номера, собственно и читать-то нечего :wink:
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
dimon-790
Мучитель микросхем
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37
Контактная информация:

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

Сообщение dimon-790 »

suslogon писал(а)::cry: жаль что мне никто помочь не может

Сам-бы давно написал наверное, если-бы не попрошайничал а почитал немного и подумал малость. Вот, взял пример с хелпика не много откоментировал , думаю дальше сам разберёшся.Хотел попробовать её в протеусе не нашел такой модели,так что если что не так извиняй. Покупать такую микру у нас в деревне "Гадюкино" негде, так-что как говориться чем могу...
Вложения
adc.rar
(871 байт) 367 скачиваний
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

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

Сообщение nsl2004 »

dimon-790 писал(а):
suslogon писал(а)::cry: жаль что мне никто помочь не может

Сам-бы давно написал наверное, если-бы не попрошайничал а почитал немного и подумал малость. Вот, взял пример с хелпика не много откоментировал , думаю дальше сам разберёшся.Хотел попробовать её в протеусе не нашел такой модели,так что если что не так извиняй. Покупать такую микру у нас в деревне "Гадюкино" негде, так-что как говориться чем могу...

Скажите, приложенный Вам код считает серийник 1-wire устройства ? Что то я в нем ничего не понял :(
Аватара пользователя
dimon-790
Мучитель микросхем
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37
Контактная информация:

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

Сообщение dimon-790 »

нет серийники с 1-wire устройств он не читает как впрочем и всё остальное касаемо 1-wire.
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

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

Сообщение nsl2004 »

Вот при таком коде

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

1wreset        'reset the device
   Print " V.1.2.2"
   Waitms 500 
    W = 1wirecount()
       Print W ; "  " ; "1-wire device"
           Reg_no(1) = 1wsearchfirst()       
            For I = 1 To 8       
       Print Hex(reg_no(i));       
            Next       
       Print "  " ; "SERIAL NUMBER"       'print the number

Выводит серийник в удобочитаемом виде вот так 05ССС3080000005B
При таком коде

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

Do
1wreset
   Waitms 500
   1wwrite &H33             
        Ar(1) = 1wread(8)
   Print "Number";
         For I = 1 To 8
   Print Hex(ar(i));
         Next
   Print
   Waitms 1000
Loop

Выводит тоже серийник но уже уже вот так ADAAAEAFBA5A5555
В чем может быть проблема? Ни настроек ничего не менял. Опросил в Протеусе один и тот же датчик, серийник не менял в настройках.
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

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

Сообщение nsl2004 »

Выходит Bascom скорее мертв, чем жив? :))
Ответить

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