roboforum.ru

Технический форум по робототехнике.

BASCOM AVR вопросы и ответы

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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

Сообщение EdGull » 25 мар 2009, 09:52

пока ты не включешь программно альтернативные функции ноги, они работать не будут.
или ты нам не весь код предоставил?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

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

Сообщение flyroman » 09 апр 2009, 23:43

Забыл ответить, извините.
Вопрос решён, но вот дело в том что непонятно как он решился. Просто сегмент стал работать нормально и всё.

Думаю мож де замыкало.

Всем спасибо.
«Это невозможно» — сказала Причина. «Это безрассудно!» — заметил Опыт. «Это бесполезно!» — отрезала Гордость.
«Попробуй» — шепнула Мечта…
Аватара пользователя
flyroman
 
Сообщения: 1266
Зарегистрирован: 12 янв 2009, 21:39
Откуда: Чебоксары, Чувашская Республика
Skype: roman.buhalov
прог. языки: Basic, VisualBasic,Pascal, Delphi, ASM
ФИО: Роман Сергеевич

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

Сообщение flyroman » 15 апр 2009, 02:03

Вопрос про RND ...

хотя RND функция, которая возвращает произвольное значение.., но при каждом включении программы она все же возвращает те же произвольные упорядоченные значения... :o
Какая функция в Bascom AVR делает так, чтобы при каждом включении программы RND возвращала разные значения?...
Например как в Visual Basic или просто Basic- Randomize Timer, Randomize(Timer).

А то робот, зараза, делает все тоже самое((
«Это невозможно» — сказала Причина. «Это безрассудно!» — заметил Опыт. «Это бесполезно!» — отрезала Гордость.
«Попробуй» — шепнула Мечта…
Аватара пользователя
flyroman
 
Сообщения: 1266
Зарегистрирован: 12 янв 2009, 21:39
Откуда: Чебоксары, Чувашская Республика
Skype: roman.buhalov
прог. языки: Basic, VisualBasic,Pascal, Delphi, ASM
ФИО: Роман Сергеевич

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

Сообщение blindman » 15 апр 2009, 04:38

Там генератор псевдослучайных чисел. МК после старта всегда выполняет одну и ту же последовательность команд, соответственно и последовательность выдаваемая генератором одна и та же. Для получения новой последовательности можно при каждом перезапуске МК инициализировать генератор случайным значением полученным извне. Подойдут например показания часов или температура воздуха. Как инициализировать генератор - должно быть написано в документации
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение EdGull » 15 апр 2009, 09:26

самый лучший рандомайз это последние цифры уровня заряда акб :wink:
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

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

Сообщение flyroman » 18 апр 2009, 15:20

да пронятно что можно использовать внешние значения...
а так по себе в МК Bascome нет такой функции?
«Это невозможно» — сказала Причина. «Это безрассудно!» — заметил Опыт. «Это бесполезно!» — отрезала Гордость.
«Попробуй» — шепнула Мечта…
Аватара пользователя
flyroman
 
Сообщения: 1266
Зарегистрирован: 12 янв 2009, 21:39
Откуда: Чебоксары, Чувашская Республика
Skype: roman.buhalov
прог. языки: Basic, VisualBasic,Pascal, Delphi, ASM
ФИО: Роман Сергеевич

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

Сообщение galex1981 » 18 апр 2009, 15:33

Как в Хелпе Bascom написано:
Код: Выделить всёРазвернуть
You can use a different SEED value by dimensioning and assigning ___RSEED yourself:
Dim ___rseed as word : ___rseed = 10234
Dim I as word : I = rnd(10)

When your application uses a timer you can assign ___RSEED with the timer value. This will give a better random number.

В общем задаешь ___rseed или через таймер или по показаниям датчиков и будет тебе почти полный рандомайз
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

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

Сообщение blindman » 18 апр 2009, 15:54

galex1981 писал(а):В общем задаешь ___rseed или через таймер или по показаниям датчиков

Без внешних данных с одним только таймером всегда будет одна и та же последовательность
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение galex1981 » 12 май 2009, 02:03

Ниже выкладываю код таймера на 3 минуты для Меги 32/88. При желании можете сделать на любое другое время
Код: Выделить всёРазвернуть
'фусибиты
$prog &HFF , &HE4 , &HD9 , &H00

'камень
$regfile = "m32DEF.dat"
$crystal = 7372800
$baud = 115200
Config Serialin = Buffered , Size = 20

$hwstack = 64
$swstack = 64
$framesize = 64

Dim Tick As Word
Dim I As Byte
Dim T As Word
Dim Cnt As Byte

Declare Sub Swait(byval Secs As Word)

On Ovf0 Timr0
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Timer0

' Ниже следует отладочное сообщение в RS-232 порт
Ucsrb.rxen = 0
Print "start tmr"
Ucsrb.rxen = 1

Start Timer0

Cnt = 0
Call Swait(180)                                              ' wait 3 munutes
Ucsrb.rxen = 0
Print "Ok"
Ucsrb.rxen = 1

Do

Loop

Timr0:
  ' timer 0 overflow occurred
   Incr Cnt
   If Cnt = 32 Then
   Incr Tick
   Cnt = 0
   End If
Return

Sub Swait(secs As Word)
  ' do an stand-by wait for the specified number of seconds
  Tick = 0
  While Secs >= Tick
    Gosub Sbymode
  Wend
End Sub

Sbymode:
  ' put the processor into an stand-by mode sleep state for approximately
  ' one milli second based on 1 MHz clock and 1024 timer 0 prescale
  $asm
    push r18                                                ' save current r18
    push r19                                                ' save current r19
    in   r19,SREG                                           ' get current status reg
    in   r18,MCUCR                                          ' get current MCU cntl reg
'    ori  r18,$E0                                            ' set stand by mode (SE + SM2 + SM1)   Мега 88
    ori  r18,$0B                                            ' set stand by mode (SE + SM2 + SM1)    Мега 32

    !out MCUCR,r18                                          ' set MCU cntl reg
    sleep                                                   ' put MCU into idle mode sleep
    '--------waiting to return after timer0 overflow and MCU awake
    !out  SREG,r19                                          ' restore status reg
    pop r19                                                 ' restore old r19
    pop r18                                                 ' restore old r18
  $end Asm
Return
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

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

Сообщение vadik » 18 дек 2009, 23:28

Всем привет. Заранее прошу прощения если не туда пишу. Пишу программу для вывода на семисегментный четырехразрядный индикатор. Возникла такая проблема. Не могу решить уже несколько дней. Надо разделить число на отдельные цифры. Т.е. на входе имеем число D=1234, а на выходи должно получиться четыре числа D1=1, D2=2, D3=3, D4=4. Спасибо
vadik
 
Сообщения: 2
Зарегистрирован: 18 дек 2009, 23:17
Откуда: СПб

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

Сообщение yak-40 » 18 дек 2009, 23:37

1234 делишь на 1000, получаешь D1.
Остаток от деления делишь на 100, получаем D2.
Ну т т. д. :)
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!
Аватара пользователя
yak-40
 
Сообщения: 3037
Зарегистрирован: 23 окт 2007, 22:03
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец

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

Сообщение vadik » 19 дек 2009, 00:41

Так просто!!! А я наооборот сначала на 10 делил, потом еще на 10...И ничего не получилось. Спасибо за ответ!!!
vadik
 
Сообщения: 2
Зарегистрирован: 18 дек 2009, 23:17
Откуда: СПб

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

Сообщение blindman » 19 дек 2009, 05:57

Правильнее взять остаток от деления на 10, вывести в младший разряд (правый) индикатора. Потом поделить на 10. Повторить, выведя остаток на второй справа индикатор. Повторить столько раз, сколько разрядов.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Пред.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7