здраствуйте господа , вот набросал в bascom-avr часики но они работают с перебоями , в начале он запускается все хорошо , а потом сбрасывается и все по новой , сброс происходит в разное время , еще проблема не считывает данные с ds1307 а если и считало то отоброжает 5часов 55 минут , секунды не знаю не выводил, думал проблема с кварцам он на 10МГц установил от внутреннего на 1 МГц внес изменения в программу поставил фьюзы то же самое , питание не просидает , остается касяк в коде , где не пойму , подскажите
$regfile = "m16def.dat"
$crystal = 10000000
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim E As Byte
Dim F As Byte
Dim G As Byte
Dim H As Byte
Dim Ma As Byte
Dim Mb As Byte
Dim Mc As Byte
Dim Md As Byte
Dim Me As Byte
Dim Mf As Byte
Dim Mg As Byte
Dim Mh As Byte
Dim X As Byte
Dim Y As Integer
Dim Z As Byte
Config Porta = Output
Config Portd = Output
Config Portc.2 = Input
Config Portc.3 = Input
Config Sda = Portc.1
Config Scl = Portc.0
A = &B11111110
B = &B11111101
C = &B11111011
D = &B11110111
E = &B11101111
F = &B11011111
G = &B10111111
H = &B01111111
X = 8
Gosub Led
Portd = A
Waitms 500
Portd = B
Waitms 500
Portd = C
Waitms 500
Portd = D
Waitms 500
Portd = E
Waitms 500
Portd = F
Waitms 500
Portd = G
Waitms 500
Portd = H
Waitms 500
Portd = &B00000000
Porta = &B00000000
Do
Gosub Ds1307
Gosub Led2
Loop
Led:
Select Case X
Case 0 : Porta = &B00111111
Case 1 : Porta = &B00000110
Case 2 : Porta = &B01011011
Case 3 : Porta = &B01001111
Case 4 : Porta = &B01100110
Case 5 : Porta = &B01101101
Case 6 : Porta = &B01111101
Case 7 : Porta = &B00000111
Case 8 : Porta = &B01111111
Case 9 : Porta = &B01101111
End Select
Waitms 5
Return
Led2:
Portd = A
X = Ma
Gosub Led
Portd = B
X = Mb
Gosub Led
Portd = C
X = Mc
Gosub Led
Portd = D
X = Md
Gosub Led
Portd = E
X = Me
Gosub Led
Portd = F
X = Mf
Gosub Led
Portd = G
X = Mg
Gosub Led
Portd = H
X = Mg
Gosub Led
Return
Ds1307:
Dim Seco As Byte
Dim Mine As Byte
Dim Hour As Byte
Dim Day As Byte
Dim Dat As Byte
Dim Month As Byte
Dim Year As Byte
I2cstart
I2cwbyte &HD0
I2cwbyte &H00
I2cstart
I2cwbyte &HD1
I2crbyte Seco , Ask
I2crbyte Mine , Ask
I2crbyte Hour , Ask
I2crbyte Day , Ask
I2crbyte Dat , Ask
I2crbyte Month , Ask
I2crbyte Year , Nack
I2cstop
Seco = Makedec(seco)
Mine = Makedec(mine)
Hour = Makedec(hour)
Day = Makedec(day)
Dat = Makedec(dat)
Month = Makedec(month)
Year = Makedec(year)
If Seco = 80 Then
Seco = 10
Seco = Makebcd(seco)
I2cstart
I2cwbyte &HD0
I2cwbyte 0
I2cwbyte Seco
I2cstop
End If
If Hour > 9 Then
Y = Hour / 10
Mc = Abs(y)
Md = Hour Mod 10
Else
Mc = &B00000000
Md = Hour
End If
If Mine > 9 Then
Y = Mine / 10
Me = Abs(y)
Mf = Mine Mod 10
Else
Me = 0
Mf = Mine
End If
Ma = &B00000000
Mb = &B00000000
Mg = &B00000000
Mh = &B00000000
If Pinc.2 = 0 Then
Incr Mine 'увеличить менуты на еденицу
Mine = Makebcd(mine) 'конвертировать из десетичного в двоично-десетичный форма
I2cstart 'запускаем I2c линию связи
I2cwbyte &HD0 'обращаемся к микросхеме DS1307
I2cwbyte 1 'отпровляем в микросхему DS1307 в минуты
I2cwbyte Mine 'отпровляем увеличиную еденицу в минутах и переконвертированную в двоично-десетичном формате в микросхему DS1307
I2cstop 'останавливаем передачу данных и освобождаем I2C
Waitms 100 'задержка 100мили секунд
End If 'конец условия
If Pinc.3 = 0 Then
Incr Hour
Hour = Makebcd(hour)
I2cstart
I2cwbyte &HD0
I2cwbyte 2
I2cwbyte Hour
I2cstop
Waitms 100
End If
Return
End
код еще не даписан он сырой
к порту d я подключил общий провод (катод) симисегментного индикатора
к порту a сами цифры
в начале программа по очереди проверяет индикацию затем считывает температуру и выводит на индикаторы (так плонировалось)