akl писал(а):uk8amk А что такое ADUM485?
опечатка
akl писал(а):uk8amk А что такое ADUM485?
Код: Выделить всё
dim counter as word , flag as bit
do
incr counter
if counter = 500 then : toggle flag: counter = 0 : end if
A = Getadc(5)
B = Getadc(0)
if flag = 1 then : M1 = A * 5 : else : M1 = B * 5 : end if
M2 = M1
M3 = M1
M1 = M1 / 1000
N1 = Abs(m1) '
M2 = M2 Mod 1000
M2 = M2 / 100
N2 = Abs(m2)
M3 = M3 Mod 100
M3 = M3 / 10
N3 = Abs(m3)
loopКод: Выделить всё
$regfile = "attiny2313.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Sda = Porta.1 : Config Scl = Porta.0
Ddrb = 255
Config Portd.3 = Output 'ok
Config Portd.4 = Output 'ok
Config Portd.5 = Output 'ok
Config Portd.6 = Output 'ok
Dim N(4) As Byte
Dim Index As Byte
Dim Seco As Byte , Mine As Byte , Hour As Byte
Dim Count As Byte , T As Byte , C As Byte
Dim Disp As String * 4
Dim W(4) As String * 1
Dim Pak(4) As String * 2
Dim T1 As Byte , Byte0 As Byte , Byte1 As Byte
Dim T2 As Byte
Dim Viv As Bit
Config 1wire = Portd.2
'Seco = 0
'Seco = Makebcd(seco) : Mine = Makebcd(43) : Hour = Makebcd(20)
'I2cstart
'I2cwbyte &HA2
'I2cwbyte &H03
'I2cwbyte Seco
'I2cwbyte Mine
'I2cwbyte Hour
'I2cstop
'1:
Do
I2cstart 'Чтение времени
I2cwbyte &HA2
I2cwbyte &H02
I2cstart
I2cwbyte &HA3
I2crbyte Seco , Ack
I2crbyte Mine , Ack
I2crbyte Hour , Nack
I2cstop
Seco = Makedec(seco) : Mine = Makedec(mine) : Hour = Makedec(hour)
If Count < Seco Then : Incr C 'Каждую секунду увеличиваем значение флага С
If C = 1 Then 'если с = 1 то -
1wreset 'Запрос на преобразование температуры
1wwrite &HCC
1wwrite &H44
End If
If C = 2 Then 'если с = 2 то -
1wreset 'Чтение температурры
1wwrite &HCC
1wwrite &HBE
Byte0 = 1wread()
Byte1 = 1wread()
T1 = Byte0 / 16
T2 = Byte1 * 16
T1 = T1 + T2
End If
If C = 5 Then : Viv = 1 : End If 'флаг для вывода температурры(1 сек)
If C = 6 Then : Viv = 0 : C = 0 : End If 'сброс флага вывода температурры
End If
Count = Seco
If Viv = 0 Then 'Формирование строки для отображение часов
Pak(1) = Str(hour) 'переводим байтовую переменную в строковую
Pak(1) = Format(pak(1) , "00") 'форматируем строковую переменную до вида - "НН"
Pak(2) = Str(mine) 'переводим байтовую переменную в строковую
Pak(2) = Format(pak(2) , "00") 'форматируем строковую переменную до вида - "ММ"
Disp = Pak(1) + Pak(2) 'Составляем строковую переменную для вывода - "ННММ"
Else 'Формирование строки для отображение температурры
Pak(1) = Str(t1) 'переводим байтовую переменную в строковую
'Pak(1) = Format(pak(1) , "00")
Disp = " " + Pak(1) + "^" 'форматируем строковую переменную до вида - " ТT^".(^-знак градуссы С)
End If
For Index = 1 To 4 'Разбор строки на разряды ы вавод на дисплей
W(index) = Mid(disp , Index , 1)
N(index) = Val(w(index))
If W(index) = " " Then : N(index) = 10 : End If
If W(index) = "^" Then : N(index) = 11 : End If
Next Index
Set Portd.6 : Portb = Lookup(n(1) , P) : Waitms 1 : Reset Portd.6
Set Portd.5 : Portb = Lookup(n(2) , P) : Waitms 1 : Reset Portd.5
Set Portd.4 : Portb = Lookup(n(3) , P) : Waitms 1 : Reset Portd.4
Set Portd.3 : Portb = Lookup(n(4) , P) : Waitms 1 : Reset Portd.3
Loop
P:
Data &B11010111 , &B10000100 , &B11001011 , &B11001110 , &H9C , &H5E , &H5F , &HC4 , &HDF , &HDE , &H00 , &HD8


vanyap1 писал(а):Странно что toggle в баскоме отрабатывает медленнее чем set reset.

Код: Выделить всё
PORTB ^= (1 << 5);
Config Portd.2 = Output : Led Alias Portd.2
Config Timer0 = Timer , Prescale = 1 : On Timer0 Pulse : Enable Timer0 : Enable Interrupts
Dim Z As Byte , Y As Integer
Do
Y = 10
Loop
End
Pulse:
Incr Z
If Z >= Y Then : Reset Led : Z = 0
Else : Set Led : End If
Return
IDok писал(а):што должен делать в данном случае цикл Do\Loop и где в теле программы вызов подпрограммы Pulse?
Radan писал(а):
В Do\Loop вы должны менять значение яркости переменной Y.
Pulse срабатывает по таймеру 0 - On Timer0 Pulse
симулятор Баскома тоже по циклу крутится и не хочет выходить
IDok писал(а):тысяча извинений, я сварщик пока не настоящий
А это в Proteus'e смотреть надо.
Здесь рабочий девайс с ШИМом
IDok писал(а): два эффекта одновременно (на разных выходах, ессно) я ж не запущу, да?
К примеру нам надо сконфигурировать порт B таким образом
CONFIG PORTB = OUTPUT
CONFIG PORTB.3 = INPUT
CONFIG PORTB.4 = INPUT
CONFIG PORTB.5 = INPUT
То есть – 3,4 и 5 выводы порта настроены на вход, а остальные на выход. С помощью DDR то же самое можно сделать одной строчкой… вот так…
DDRB=&B11100011
Можно также устанавливать направление соответствующих линий порта с помощью установки регистра DDRB. Для примера инструкция:
DDRB = &B00001111
повлечет запись числа 15 в регистр направления порта B, и 4 старших бита (PORTB.7 до PORTB.4) будут выходами, а 4 младшие (PORTB.3 до PORTB.0) входами.
это все можно настроить через специальный регистр DDR, настройка займет всего одну строчку кода:
DDRB = 11101011 '2 и 4 ножки порта B сконфигурированы на вход, остальные - на выход