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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Bear2011
Друг Кота
Сообщения: 13253
Зарегистрирован: Ср апр 06, 2011 09:58:13
Откуда: Кузбасс

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

Сообщение Bear2011 »

а где их выставлять?


Options->Compiler->Chip

СпойлерИзображение
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

так у меня так и стоит
может у вас версия другая?
СпойлерИзображение
Аватара пользователя
Bear2011
Друг Кота
Сообщения: 13253
Зарегистрирован: Ср апр 06, 2011 09:58:13
Откуда: Кузбасс

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

Сообщение Bear2011 »

У меня BASCOM 2.0.5.0
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

rus084 писал(а):как написать подпрограмму измерения частоты ?
нужно от 25гц до 200гц .

можно взять отсюда http://cxem.net/mc/mc183.php
У меня BASCOM 2.0.5.0

и там тоже самое...может я неправильно Вас понимаю?
СпойлерИзображение
Аватара пользователя
Bear2011
Друг Кота
Сообщения: 13253
Зарегистрирован: Ср апр 06, 2011 09:58:13
Откуда: Кузбасс

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

Сообщение Bear2011 »

оже самое...может я неправильно Вас понимаю?


Тогда я не знаю. Я же говорю что потратил на изучение всего день. Написал программу все нормально заработало. Смотрите ваши настройки
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

Bear2011 писал(а):
оже самое...может я неправильно Вас понимаю?


Тогда я не знаю. Я же говорю что потратил на изучение всего день. Написал программу все нормально заработало. Смотрите ваши настройки

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

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

Сообщение kip96 »

pavel1979 писал(а):так у меня так и стоит
может у вас версия другая?
СпойлерИзображение

Попробуй поставит всё по нулям. И в коде.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
Bear2011
Друг Кота
Сообщения: 13253
Зарегистрирован: Ср апр 06, 2011 09:58:13
Откуда: Кузбасс

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

Сообщение Bear2011 »

Вот тут я выкладывал архив.
viewtopic.php?p=1872913#p1872913
В нем все - hex, исходник на BASCOM и проект в Proteus'e
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

Bear2011 писал(а):Вот тут я выкладывал архив.
viewtopic.php?p=1872913#p1872913
В нем все - hex, исходник на BASCOM и проект в Proteus'e

спасибо!компилируется норм,78 процентов,никогда не думал о подобном,видимо даташит невнимательно читал...
Аватара пользователя
rus084
Друг Кота
Сообщения: 3443
Зарегистрирован: Вт июн 28, 2011 12:11:50
Откуда: Россия,Ставропольский край, ст.Бекешевская
Контактная информация:

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

Сообщение rus084 »

pavel1979 писал(а):
rus084 писал(а):как написать подпрограмму измерения частоты ?
нужно от 25гц до 200гц .

можно взять отсюда http://cxem.net/mc/mc183.php


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

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

Сообщение edm2007 »

pavel1979 писал(а):первый раз слышу подобное ... а где их выставлять?


А в моем варианте выше led_automat.rar посмотрите как стек сконфигурирован.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
rus084
Друг Кота
Сообщения: 3443
Зарегистрирован: Вт июн 28, 2011 12:11:50
Откуда: Россия,Ставропольский край, ст.Бекешевская
Контактная информация:

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

Сообщение rus084 »

попытался написать программу для аттини13 . так только инициализация забрала всю память .
в чем дело?
код я почти дописал , осталось уместить в 1кб и поправить константы .

вот что должна делать программа :
согласовывать входное сопротивдение степдауна с выходным . входное вычисляется по оборотам генератора , на выходе напряжение должно быть 13в . напряжение генератора на хх около 10в*1000 оборотов . ток кз-5а
Меня зовут Димон .
Изображение
Изображение
Аватара пользователя
elf.arxont
Опытный кот
Сообщения: 887
Зарегистрирован: Пн июн 27, 2011 10:06:23
Откуда: Донецк

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

Сообщение elf.arxont »

Пытаюсь потренироваться с ШИМом в BASCOM'e. Пишу:

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

$regfile = "2313def.dat"
$crystal = 8000000                                 
$hwstack = 40
$swstack = 16
$framesize = 32


Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
Config Portb.3 = Output
Config Portb.4 = Output
Start Timer1                                               

Do
Incr Pwm1a
Decr Pwm1b
Waitms 100
Loop
End 

Так вот на строчку Decr pwm1b (уменьшение скважности на выводе PWM1B) BASCOM ругается благим матом: "Error 15 Wrong data type". Что я написал не так и как это исправить?
Изображение
Аватара пользователя
rus084
Друг Кота
Сообщения: 3443
Зарегистрирован: Вт июн 28, 2011 12:11:50
Откуда: Россия,Ставропольский край, ст.Бекешевская
Контактная информация:

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

Сообщение rus084 »

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

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

Сообщение edm2007 »

elf.arxont писал(а):Пытаюсь потренироваться с ШИМом в BASCOM'e. Пишу...


Здравствуйте.

Вы указали заголовочный файл 2313DEF.DAT, а это старый МК AT90S2313. И у него только один регистр сравнения - OCR1A. Потому компилятор и ругается на несуществующий регистр OCR1B (PWM1B). Просто выберите правильный контроллер, и все у Вас будет хорошо. :wink:

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

$regfile = "attiny2313.dat"
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
elf.arxont
Опытный кот
Сообщения: 887
Зарегистрирован: Пн июн 27, 2011 10:06:23
Откуда: Донецк

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

Сообщение elf.arxont »

edm2007, спасибо! А я-то думал, что за чертовщина, что он ругается на ровном месте. А оказалось, что это я прохлопал. AT90S2313 это ж древняя версия Тини2313, у которого даже фьюзов нет, насколько я помню. И помню, что прошивки от AT90S2313 подходят к ATtiny2313, а вот наоборот.... :facepalm:
Поменял тип МК, все откомпилировалось :beer:
Изображение
zx-tv
Родился
Сообщения: 8
Зарегистрирован: Чт сен 29, 2011 12:50:01

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

Сообщение zx-tv »

Помогите инвертировать трёх разрядный семи сегментный индикатор с (ОК) в (ОА) ..исходник

$regfile = "attiny26.dat"
$hwstack = 32
$swstack = 32
$framesize = 16
$crystal = 8000000

Const #100 = &B11111111
Const #87 = &B01111111
Const #75 = &B01110111
Const #62 = &B01101101
Const #50 = &B10101010
Const #38 = &B00110010
Const #25 = &B00100010
Const #15 = &B00000011
Const #8 = &B00000001


Const Rz1 = &B00000001:
Const Rz2 = &B00000010:
Const Rz3 = &B00000100:

DdrA = &B01111111 'направление линий порта A: 1 - на вывод
PortA = &B01110000

DdrB = &B01111111
PortB = &B00000000


A Alias PortB.2 'Тут вписываем порты к которым подключены сегменты индикатора
B Alias PortB.0
C Alias PortB.4
D Alias PortB.6
E Alias PortB.5
F Alias PortB.1
G Alias PortB.3
Dp Alias PortA.6
Dig1 Alias PortA.0
Dig2 Alias PortA.1
Dig3 Alias PortA.2

UPR Alias PORTA.5
tFREQ Alias PORTA.4
BUZZ Alias PORTA.3

Dim I As Byte , X As Byte , Digs(3) As Byte , SegmLink As Byte , Dg as Byte
Dim U as Word , Ut as Word
Dim Bright as Byte
Dim WordTmp As Word , DpRz As Byte , Razr As Byte , Full As Byte

Dim Second As Byte , Minut As Byte , Hour As Byte , Delit as Byte , TickCnt As Byte ' переменные для часов

Dim MinutCh As Byte , HourCh As Byte ' Время заряда до полного


Declare Sub GetU
Declare Sub DisplU
Declare Sub DisplTime(Byval Hr as Byte , Byval Mn as Byte)

Config Timer0 = Timer , Prescale = 64 : On Timer0 Timer0_int Nosave
Config Timer1 = Timer , Prescale = 1024 : On OVF1 Timer1_int Nosave

TIMSK = &B0000110 'Enable Timer0 + Timer1

Enable Interrupts

Start TIMER0
Start TIMER1

Config Adc = Single , Prescaler = Auto , Reference = Internal 'Refrenz: 2,25 V


Bright = #100

Digs(3) = 10 : Digs(2) = 1 : Digs(1) = 7 ' Версия A1.7
DpRz = 2



' 1 минуту показываем напряжение. Для подстройки например.
Bright = #25

Do
GetU
Waitms 500
Call DisplU

Loop Until Hour = 0 and Minut = 1


StartTesting:
GetU
DpRz = 0 ' < 8 вольт. Либо очень разряжен, либо его нет совсем, либо 6 вольтовый
If U < 80 then
BegTst:
Digs(3) = 24 : Digs(2) = 14 : Digs(1) = 23 ' Дисплей "t E S"
Ut = U
UPR = 0 ' Включаю заряд
Wait 1
GetU
if U > 160 then ' Аккумулятор не подключен
UPR = 1 ' Выключаю заряд
Digs(3) = 11 : Digs(2) = 10 : Digs(1) = 24 'Дисплей "b A t"
Wait 10
Goto BegTst
end if


For i = 1 to 30
' DpRz = 1
Wait 1
DpRz.1 = NOT DpRz.1
' Waitms 500
next i

UPR = 1 ' Отключить заряд
For i = 3 to 1 step -1
DpRz = i
Wait 2
Next i
DpRz = 0
GetU
If U < Ut then ' Не заряжается
Digs(3) = 11 : Digs(2) = 10 : Digs(1) = 13 ' Дисплей "b A d"
' BUZZ = 1
' Wait 1
' BUZZ = 0
Wait 10
Goto BegTst
end if
If U > 45 and U < 80 then
Ut = 72
Goto Charge
end if
end if
Ut = 146
Charge: ' Цикл зарядки
GetU
If U > Ut then
if U > 160 then Goto BegTst
if Ut = 146 then Ut = 130
if Ut = 72 then Ut = 62
Digs(3) = 15 : Digs(2) = 25 : Digs(1) = 20 ' Дисплей "F U L"
DpRz = 0
If Full = 0 then
HourCh = Hour : MinutCh = Minut
end if
Full = 1
if HourCh = Hour AND MinutCh = Minut then
Buzz = 1
Waitms 300
Buzz = 0
end if
Wait 1
Call DisplTime(HourCh , MinutCh)
Goto Charge
end if

If Ut < 130 then
Digs(3) = 25 : Digs(2) = 33 : Digs(1) = 6 ' Дисплей "u = 6"
wait 5
end if



If Full = 1 Then ' Был заряжен на полную
Digs(3) = 24 : Digs(2) = 30 : Digs(1) = 36 ' Дисплей "t r c"
Wait 30
UPR = 0
Wait 10
UPR = 1 'Выключаю заряд
Goto Charge
end if
UPR = 0 'Включаю заряд на примерно минуту
Call DisplTime(Hour , Minut) ' Показываем 2 секунды часы ххh и две секунды минуты xx|
Call DisplU 'Напряжение на батарее
For i = 1 to 50 ' Мигает точкой 50 секунд
DpRz = 2
Waitms 500
DpRz = 0
Waitms 500
Next i
UPR = 1 'Выключаю заряд
Wait 1 ' Пауза, что бы мерить напряжение на батарее, а не выход зарядного
Goto Charge 'конец основного цикла


Sub DisplTime(Hr , Mn ) '
DpRz = 0
Digs(2) = Hr Mod 10
Hr = Hr \ 10
Digs(3) = Hr Mod 10
Digs(1) = 34
wait 2
Digs(2) = Mn Mod 10
Mn = Mn \ 10
Digs(3) = Mn Mod 10
Digs(1) = 35
wait 2
end sub



Sub DisplU
WordTmp = U
DpRz = 2
for i = 1 to 3
Digs(i) = WordTmp Mod 10
WordTmp = WordTmp \ 10
next i

end sub


Sub GetU
Start Adc
U = 0
For i = 1 to 3
Waitms 30
U = U + Getadc(6)
Next i
Stop Adc
U = U / 15
End Sub



Timer0_int: ' Обработка прерываний таймера0
$asm
Push R31 'сохраним регистры
PUSH R26
Push R25
Push R24
Push R20
Push R16
Push R10
Push R0
In R31 , Sreg
Push R31
$End asm
set Dig1 : Set Dig2 : Set Dig3
Lds R31 , {Bright} 'Сдвимем биты в переменной по кольцу
LSR R31
BRCC R_NUL
ORI R31, 128
R_nul:
Sts {Bright} , R31
BRCS ON_LCD
RJMP End_IntTimer0
ON_LCD:

Stop Timer0
$asm
Lds R31 , {X}
INC R31
CPI R31, 4
BRLO Save
LDI R31,1
Save:
Sts {X}, R31
$End asm

Dg = Digs(X)
'(
if Dg > 128 then
Dg = Dg - 128
SegmLink = Lookup(Dg , Dta)
SegmLink = SegmLink + 128
else
SegmLink = Lookup(Dg , Dta)
end if
')
SegmLink = Lookup(Dg , Dta)

A = 0
$asm
Lds R31 , {SegmLink}
SBRC R31, 0
$End asm
A = 1
B = 0
$asm
SBRC R31, 1
$End asm
B = 1
C = 0
$asm
SBRC R31, 2
$End asm
C = 1
D = 0
$asm
SBRC R31, 3
$End asm
D = 1
E = 0
$asm
SBRC R31, 4
$End asm
E = 1
F = 0
$asm
SBRC R31, 5
$End asm
F = 1
G = 0
$asm
SBRC R31, 6
$End asm
G = 1
Dp = 0
$asm
SBRC R31, 7
$End asm
Dp = 1

if DpRz = X then Dp = 1


Select Case X
Case 1 : Reset Dig3
Case 2 : Reset Dig2
Case 3 : Reset Dig1
End Select


Start Timer0
End_IntTimer0:
$asm
Pop R31
OUT Sreg , R31
POP R0
POP R10
POP R16
POP R20
POP R24
POP R25
POP R26
Pop R31

' reti
$end asm

Return




Timer1_int:
$asm
Push R31 'сохраним регистры
Ldi R31 , &HB2 'переустановим счетчик
Out Tcnt1 , R31
In R31 , Sreg
Push R31

Lds R31 , {Delit}
inc R31 'Incr Delit
Sts {Delit} , R31
CPI R31, 100 'If Delit < 100 Then Goto INTT0_E
brlo EndTimer1_Int
CLR R31 'Delit = 0
Sts {Delit} , R31
'----- Ниже все вызывается 1 раз в секунду
' WDR
Lds R31 , {Second}
inc R31
Sts {Second} , R31
CPI R31, 60
brlo EndTimer1_Int
clr R31
Sts {Second} , R31
'---- Ниже все вызывается 1 раз в минуту
Lds R31 , {Minut}
inc R31
Sts {Minut} , R31
CPI R31, 60
brlo EndTimer1_Int
clr R31
Sts {Minut} , R31

'---- Ниже все вызывается 1 раз в час
Lds R31 , {Hour}
inc R31
Sts {Hour} , R31
CPI R31, 99
brlo EndTimer1_Int
clr R31
Sts {Hour} , R31
STS {Full} , R31 ' После 99 часов считаем, что нужен полный цикл заряда


EndTimer1_Int:

Pop R31
Out Sreg , R31 'восстановим регистры
Pop R31
' reti
$end asm
Return


Dta:
' 0 1 2 3 4 5 6 7 8 9
Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110 , &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111
' A(10) b(11) C(12) d(13) E(14) F(15) G(16) H(17) i(18) J(19)
Data &B01110111 , &B01111100 , &B00111001 , &B01011110 , &B01111001 , &B01110001 , &B01111101 , &B01110110 , &B00110000 , &B00011110
' L(20) o(21) P(22) S(23) t(24) U(25) Grad(26) -(27) .(28) Empty(29)
Data &B00111000 , &B01011100 , &B01110011 , &B01101101 , &B01111000 , &B00111110 , &B01100011 , &B01000000 , &B10000000 , &B00000000
' r(30) _(31) u(32) =(33) h (34) Минуты|(35) c (36)
Data &B01010000 , &B00001000 , &B00011100 , &B01001000 , &B01110100 , &B00100000 , &B01011000
Аватара пользователя
dimon-790
Мучитель микросхем
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37
Контактная информация:

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

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

пробуй - должен работать ...
Спойлер$regfile = "attiny26.dat"
$hwstack = 32
$swstack = 32
$framesize = 16
$crystal = 8000000

Const #100 = &B11111111
Const #87 = &B01111111
Const #75 = &B01110111
Const #62 = &B01101101
Const #50 = &B10101010
Const #38 = &B00110010
Const #25 = &B00100010
Const #15 = &B00000011
Const #8 = &B00000001


Const Rz1 = &B00000001:
Const Rz2 = &B00000010:
Const Rz3 = &B00000100:

DdrA = &B01111111 'направление линий порта A: 1 - на вывод
PortA = &B01110000

DdrB = &B01111111
PortB = &B00000000


A Alias PortB.2 'Тут вписываем порты к которым подключены сегменты индикатора
B Alias PortB.0
C Alias PortB.4
D Alias PortB.6
E Alias PortB.5
F Alias PortB.1
G Alias PortB.3
Dp Alias PortA.6
Dig1 Alias PortA.0
Dig2 Alias PortA.1
Dig3 Alias PortA.2

UPR Alias PORTA.5
tFREQ Alias PORTA.4
BUZZ Alias PORTA.3

Dim I As Byte , X As Byte , Digs(3) As Byte , SegmLink As Byte , Dg as Byte
Dim U as Word , Ut as Word
Dim Bright as Byte
Dim WordTmp As Word , DpRz As Byte , Razr As Byte , Full As Byte

Dim Second As Byte , Minut As Byte , Hour As Byte , Delit as Byte , TickCnt As Byte ' переменные для часов

Dim MinutCh As Byte , HourCh As Byte ' Время заряда до полного


Declare Sub GetU
Declare Sub DisplU
Declare Sub DisplTime(Byval Hr as Byte , Byval Mn as Byte)

Config Timer0 = Timer , Prescale = 64 : On Timer0 Timer0_int Nosave
Config Timer1 = Timer , Prescale = 1024 : On OVF1 Timer1_int Nosave

TIMSK = &B0000110 'Enable Timer0 + Timer1

Enable Interrupts

Start TIMER0
Start TIMER1

Config Adc = Single , Prescaler = Auto , Reference = Internal 'Refrenz: 2,25 V


Bright = #100

Digs(3) = 10 : Digs(2) = 1 : Digs(1) = 7 ' Версия A1.7
DpRz = 2



' 1 минуту показываем напряжение. Для подстройки например.
Bright = #25

Do
GetU
Waitms 500
Call DisplU

Loop Until Hour = 0 and Minut = 1


StartTesting:
GetU
DpRz = 0 ' < 8 вольт. Либо очень разряжен, либо его нет совсем, либо 6 вольтовый
If U < 80 then
BegTst:
Digs(3) = 24 : Digs(2) = 14 : Digs(1) = 23 ' Дисплей "t E S"
Ut = U
UPR = 0 ' Включаю заряд
Wait 1
GetU
if U > 160 then ' Аккумулятор не подключен
UPR = 1 ' Выключаю заряд
Digs(3) = 11 : Digs(2) = 10 : Digs(1) = 24 'Дисплей "b A t"
Wait 10
Goto BegTst
end if


For i = 1 to 30
' DpRz = 1
Wait 1
DpRz.1 = NOT DpRz.1
' Waitms 500
next i

UPR = 1 ' Отключить заряд
For i = 3 to 1 step -1
DpRz = i
Wait 2
Next i
DpRz = 0
GetU
If U < Ut then ' Не заряжается
Digs(3) = 11 : Digs(2) = 10 : Digs(1) = 13 ' Дисплей "b A d"
' BUZZ = 1
' Wait 1
' BUZZ = 0
Wait 10
Goto BegTst
end if
If U > 45 and U < 80 then
Ut = 72
Goto Charge
end if
end if
Ut = 146
Charge: ' Цикл зарядки
GetU
If U > Ut then
if U > 160 then Goto BegTst
if Ut = 146 then Ut = 130
if Ut = 72 then Ut = 62
Digs(3) = 15 : Digs(2) = 25 : Digs(1) = 20 ' Дисплей "F U L"
DpRz = 0
If Full = 0 then
HourCh = Hour : MinutCh = Minut
end if
Full = 1
if HourCh = Hour AND MinutCh = Minut then
Buzz = 1
Waitms 300
Buzz = 0
end if
Wait 1
Call DisplTime(HourCh , MinutCh)
Goto Charge
end if

If Ut < 130 then
Digs(3) = 25 : Digs(2) = 33 : Digs(1) = 6 ' Дисплей "u = 6"
wait 5
end if



If Full = 1 Then ' Был заряжен на полную
Digs(3) = 24 : Digs(2) = 30 : Digs(1) = 36 ' Дисплей "t r c"
Wait 30
UPR = 0
Wait 10
UPR = 1 'Выключаю заряд
Goto Charge
end if
UPR = 0 'Включаю заряд на примерно минуту
Call DisplTime(Hour , Minut) ' Показываем 2 секунды часы ххh и две секунды минуты xx|
Call DisplU 'Напряжение на батарее
For i = 1 to 50 ' Мигает точкой 50 секунд
DpRz = 2
Waitms 500
DpRz = 0
Waitms 500
Next i
UPR = 1 'Выключаю заряд
Wait 1 ' Пауза, что бы мерить напряжение на батарее, а не выход зарядного
Goto Charge 'конец основного цикла


Sub DisplTime(Hr , Mn ) '
DpRz = 0
Digs(2) = Hr Mod 10
Hr = Hr \ 10
Digs(3) = Hr Mod 10
Digs(1) = 34
wait 2
Digs(2) = Mn Mod 10
Mn = Mn \ 10
Digs(3) = Mn Mod 10
Digs(1) = 35
wait 2
end sub



Sub DisplU
WordTmp = U
DpRz = 2
for i = 1 to 3
Digs(i) = WordTmp Mod 10
WordTmp = WordTmp \ 10
next i

end sub


Sub GetU
Start Adc
U = 0
For i = 1 to 3
Waitms 30
U = U + Getadc(6)
Next i
Stop Adc
U = U / 15
End Sub



Timer0_int: ' Обработка прерываний таймера0
$asm
Push R31 'сохраним регистры
PUSH R26
Push R25
Push R24
Push R20
Push R16
Push R10
Push R0
In R31 , Sreg
Push R31
$End asm
Reset Dig1 : Reset Dig2 : Reset Dig3
Lds R31 , {Bright} 'Сдвимем биты в переменной по кольцу
LSR R31
BRCC R_NUL
ORI R31, 128
R_nul:
Sts {Bright} , R31
BRCS ON_LCD
RJMP End_IntTimer0
ON_LCD:

Stop Timer0
$asm
Lds R31 , {X}
INC R31
CPI R31, 4
BRLO Save
LDI R31,1
Save:
Sts {X}, R31
$End asm

Dg = Digs(X)
'(
if Dg > 128 then
Dg = Dg - 128
SegmLink = Lookup(Dg , Dta)
SegmLink = SegmLink + 128
else
SegmLink = Lookup(Dg , Dta)
end if
')
SegmLink = Lookup(Dg , Dta)

A = 0
$asm
Lds R31 , {SegmLink}
SBRC R31, 0
$End asm
A = 1
B = 0
$asm
SBRC R31, 1
$End asm
B = 1
C = 0
$asm
SBRC R31, 2
$End asm
C = 1
D = 0
$asm
SBRC R31, 3
$End asm
D = 1
E = 0
$asm
SBRC R31, 4
$End asm
E = 1
F = 0
$asm
SBRC R31, 5
$End asm
F = 1
G = 0
$asm
SBRC R31, 6
$End asm
G = 1
Dp = 0
$asm
SBRC R31, 7
$End asm
Dp = 1

If Dprz = X Then Dp = 0


Select Case X
Case 1 : Set Dig3
Case 2 : Set Dig2
Case 3 : Set Dig1
End Select


Start Timer0
End_IntTimer0:
$asm
Pop R31
OUT Sreg , R31
POP R0
POP R10
POP R16
POP R20
POP R24
POP R25
POP R26
Pop R31

' reti
$end asm

Return




Timer1_int:
$asm
Push R31 'сохраним регистры
Ldi R31 , &HB2 'переустановим счетчик
Out Tcnt1 , R31
In R31 , Sreg
Push R31

Lds R31 , {Delit}
inc R31 'Incr Delit
Sts {Delit} , R31
CPI R31, 100 'If Delit < 100 Then Goto INTT0_E
brlo EndTimer1_Int
CLR R31 'Delit = 0
Sts {Delit} , R31
'----- Ниже все вызывается 1 раз в секунду
' WDR
Lds R31 , {Second}
inc R31
Sts {Second} , R31
CPI R31, 60
brlo EndTimer1_Int
clr R31
Sts {Second} , R31
'---- Ниже все вызывается 1 раз в минуту
Lds R31 , {Minut}
inc R31
Sts {Minut} , R31
CPI R31, 60
brlo EndTimer1_Int
clr R31
Sts {Minut} , R31

'---- Ниже все вызывается 1 раз в час
Lds R31 , {Hour}
inc R31
Sts {Hour} , R31
CPI R31, 99
brlo EndTimer1_Int
clr R31
Sts {Hour} , R31
STS {Full} , R31 ' После 99 часов считаем, что нужен полный цикл заряда


EndTimer1_Int:

Pop R31
Out Sreg , R31 'восстановим регистры
Pop R31
' reti
$end asm
Return


Dta:
' 0 1 2 3 4 5 6 7 8 9
Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001 , &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000
' A(10) b(11) C(12) d(13) E(14) F(15) G(16) H(17) i(18) J(19)
Data &B10001000 , &B10000011 , &B11000110 , &B10100001 , &B10000110 , &B10001110 , &B10000010 , &B10001001 , &B11001111 , &B11100001
' L(20) o(21) P(22) S(23) t(24) U(25) Grad(26) -(27) .(28) Empty(29)
Data &B11000111 , &B10100011 , &B10001100 , &B10010010 , &B10000111 , &B11000001 , &B10011100 , &B10111111 , &B01111111 , &B11111111
' r(30) _(31) u(32) =(33) h (34) Минуты|(35) c (36)
Data &B10101111 , &B11110111 , &B11100011 , &B10110111 , &B10001011 , &B11011111 , &B10100111
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Аватара пользователя
Dnepr_1186
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт мар 26, 2009 20:53:27
Откуда: Беларусь.Минская обл.

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

Сообщение Dnepr_1186 »

Добрый вечер уважаемы коты!
Начну с того, чтов Баском я новичек. И на данный момент могу писать ооочень простенькие програмки, а то что посложене делаю по шаблону или меняю что-то в откоментированных исходниках.
Появилась необходимость снимать данные с термопары и выводит на жк.
Нашел микросхему драйвера термопары MAX6675 она считывает данные с термопары и передает в МК по spi
Вот загвостка в том как настроить чтобы драйвер передваал данные в МК . Знаю что для этого нужна библиотека. НО! Библиотеки есть только на зыке С/с++. Может кто поможет решить эту задачу в Баском? Библиотеки и пример работы в С/С++ предоставлю! Спасибо!
zx-tv
Родился
Сообщения: 8
Зарегистрирован: Чт сен 29, 2011 12:50:01

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

Сообщение zx-tv »

[quote="dimon-790"]
СПАСИБО! помогло
другая проблема всё работает (пишет A1.7:204:bat:tes) потом (bat:tes)по кругу циклирует а напряжение не показывает. Tfreq-отвечает за это порт 4 если я правильно понимаю (14 нога тини26). \
Если на 14 ногу подать 5вольт на дисплее должно быть 999? и как переназначить порт ввода который следит за напругой? Tfreq- как оно работает если в программе присутствует 1 раз ито при назначении портов?
Ответить

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