'Schneckenzaun V 2.0 mit Kurzschlussdedektion 'Michael Schober 09.01.2018 '30.01.18 + Kurzschlussdedektion $regfile = "attiny861.dat" $crystal = 1000000 $hwstack = 35 $swstack = 22 $framesize = 40 Dim I As Byte 'Dim D As Integer 'Dim Spgzaun As Word Dim Spannung As Word '400=1V Dim Blinken As Byte Dim Blinkenks As Byte 'PA0 bis PA3 = H-Brücke Config Porta.2 = Output 'H-Phase 1 Config Porta.6 = Output 'H-Phase 2 Config Portb.2 = Output 'LED ws Config Portb.3 = Output 'LED rt 'PA0 = Messen Batteriespannung eine Zelle (1V=400) Config Pina.0 = Input '1 Zelle messen Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56_extcap H1 Alias Porta.2 H2 Alias Porta.6 Ledws Alias Portb.2 Ledrt Alias Portb.3 'Batterie Alias Pina.0 '############### Hauptschleife Stop Ac 'Hauptschleife Do Start Adc Gosub Batterietest Stop Adc For I = 1 To Blinken Ledws = 1 Waitms 5 Ledws = 0 Waitms 200 Next I For I = 1 To 2 Gosub Zaunaktiv Next I For I = 1 To Blinkenks Ledrt = 1 Waitms 100 Ledrt = 0 Waitms 200 Next I Gosub Schlafen 'Gosub Testloop Loop '#### Subroutinen Batterietest: 'prüft, ob die Zellenspannung unter 1V ist. Dann weisse LED doppelblinken 'Prüfwert = 10bitAD / Uref * Uzelle: 1024 / 2,56 * 1 = 400 Spannung = Getadc(0) Blinken = 1 If Spannung < 400 Then Blinken = 2 'Spannung zu klein - Batterie wechseln! Blinken = 1 'Batterietest ausgeschaltetu End If Return Schlafen: 'Watchdog Reset nach ca. 4s Config Watchdog = 4096 'Watchdog-Zeit in Millisekunden Start Watchdog Powerdown Return Testloop: Do Gosub Zaunaktiv Ledws = 0 Ledrt = 1 Waitms 3 Ledws = 1 Ledrt = 0 Waitms 3 Ledws = 0 Loop Return Zaunaktiv: 'Schaltet den Zaun ein und die Polarität einmal um (3Hz) 'Zaunspannung + - H1 = 1 H2 = 0 Waitms 100 Start Adc Gosub Kurzschlusstest Stop Adc 'Zaun aus H1 = 0 H2 = 0 Waitms 50 'Zaunspannung - + H1 = 0 H2 = 1 Waitms 100 'Zaun aus H1 = 0 H2 = 0 Waitms 50 Return Kurzschlusstest: 'prüft, ob die Spannung bei R4 unter 0,5V ist = 50mA. Dann rote LED doppelblinken 'Prüfwert = 10bitAD / Uref * Uzelle: 1024 / 2,56 * 0,5 = 200 Spannung = Getadc(6) Blinkenks = 0 If Spannung > 200 Then Blinkenks = 2 End If Return