' Compiler: Bascom 2.0.7.5
'
' Dateiname: Spannung-messen AKKU-uC A85.avr
' Funktion: 2 Spannungen messen und je nach Spannung etwas ausführen
' 1. Eingangsspannung Uin (AKKU)
' > 8,0V rote LED an, alles i.O.
' < 8.0V rote LED aus, die gelbe LED blinkt 6*/Sekunde bis die Reset-Taste gedrückt wird
' 2. Ausgangsspannung Uout (LM317)
' > 4,5V grüne LED an, alles i.O.
' < 4,5V grüne LED aus, die gelbe LED blinkt 12*/Sekunde bis die Reset-Taste gedrückt wird
' Datum: Start 17.12.2021, Stand 29.12.2021
' Von: Naubaddi foto-schubser äht arcor.de (automatisch editiert wegen spamgefahr)
'
' ATtiny85 (B.5 Reset)
'
' +---v---+
' PCINT5/RESET/ADC0/dW B.5 |1 8| VCC
' PCINT3/XTAL1/CLKI/OC1B/ADC3 B.3 |2 7| B.2 SCK/USCK/SCL/ADC1/T0/INT0/PCINT2
' PCINT4/XTAL2/CLKO/OC1B/ADC2 B.4 |3 6| B.1 MISO/DO/AIN1/OC0B/OC1A/PCINT1
' GND |4 5| B.0 MOSI/DI/SDA/AIN0/OC0A/OC1A/AREF/PCINT0
' +-------+
'
' Spannungsteiler U2 = U * R2 / (R1 + R2) Spannungsregler LM317 Uout = 1,25*(1+(R2/R1))
' _____________
' Minus U Plus | |
' | <------------------------ | | LM317 |
' | R2 R1 | Plus -----| VI VO |--------------+----- Plus
' | ______ ______ | | | ADJ | | |
' +---|______|---+---|______|---+ | |_____________| R1 | |
' | | <--------- | | ______ | |
' | | U1 | +----------|______|---+ |
' + <--------- + | | |
' | U2 | Uin | | R2 | Uout
' Minus Plus | | ______ |
' | +----------|______|---+ |
' | | |
' | | |
' \_/ | \_/
' Minus ----------------------------------+----- Minus
'
' 1* : R1 22K, R2 10K für den AKKU 9,6V 1* : R1 240R, R2 680R für die uC
' U : 9,6V vom AKKU, nicht unter 7,2V entladen! Uin : 9,6V vom AKKU
' U2 : uC ADC-Messung AKKU Überwachung Uout : 4,8V für die uC
'
' 1* : R1 10K, R2 22K für den LM317
' U : 4,8V vom LM317
' U2 : uC ADC-Messung LM317 Überwachung
'
' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
$regfile = "attiny85.dat"
$crystal = 1000000
$hwstack = 32
$swstack = 32
$framesize = 40
$PROG &HFF, &H62, &HDF, &HFF ' 1MHz
' &HFF, &HE2, &HDF, &HFF ' 8MHz
' --- Deklarationen... -----------------------------------------------------------------------------------------
config timer0 = timer , prescale = 64 ' 1.000.000Hz/64=15.625Hz
on timer0 blinken ' 15.625Hz/256(8 Bit Timer)=61,04 Überläufe
enable timer0
stop timer0
config adc = single , prescaler = auto , reference = avcc
config portb.4 = input : Uin alias getadc(2)
config portb.2 = input : Uout alias getadc(1)
config portb.0 = output : LED_rot alias portb.0 : LED_rot = 0
config portb.1 = output : LED_gruen alias portb.1 : LED_gruen = 0
config portb.3 = output : LED_gelb alias portb.3 : LED_gelb = 0
enable interrupts
' --- Variablen... ---------------------------------------------------------------------------------------------
dim Uin_alt as word
dim Uout_alt as word
dim Soll as byte : Soll = 5 ' 61,04 ist ca. eine Sekunde
dim Ist as byte : Ist = 0 ' Zeit-Zähler bis Ist > Soll erreicht wurde
' --- Programm Anfang ------------------------------------------------------------------------------------------
do
if Uin <> Uin_alt then ' AKKU Überwachung
Uin_alt = Uin
Select case Uin ' 1023 / 11,0V * 8,0V = 744
case 0 to 750 : LED_rot = 0 : Soll = 11 : start timer0
case 751 to 1023 : LED_rot = 1
end select
end if
if Uout <> Uout_alt then ' uC Überwachung
Uout_alt = Uout
Select case Uout ' 1023 / 4,8V * 4,2V = 895
case 0 to 910 : LED_gruen = 0 : Soll = 5 : start timer0
case 911 to 1023 : LED_gruen = 1
end select
end if
loop
' --- Programm Ende --------------------------------------------------------------------------------------------
end
' --- Proceduren, Funktionen... --------------------------------------------------------------------------------
blinken: ' timer0 (8 Bit)
if Ist > Soll then
Ist = 0
toggle LED_gelb
else
incr Ist
endif
return
' --------------------------------------------------------------------------------------------------------------
|