;+------------------------------------------------------+ ;| | ;|Schaltung: | ;| Setting an PB2 / ADC 1 | ;| Batterie an PB4 / ADC 2 | ;| Messung an PB3 / ADC 3 | ;| Status LED an PB0 | ;| MOSFET an PB1 | ;| RESET an PB5 | ;| Referenzspannug VCC (5V) | ;| Masse GND (0V) | ;| | ;|Prozessor: | ;| ATTINY 13-20 DIP 3,6864 MHz | ;| | ;|Sprache: | ;| Assembler | ;| | ;|Datum: | ;| 16.04.2019 | ;| | ;|Version: | ;| 1.0 Ursprungsversion | ;| 2.0 neue Pinbelegung: | ;| Setting von PB5(AC0) -> PB2(AC1) | ;| Darurch kann nun auch der Reset | ;| genutzt werden. | ;| Status LED PB2 -> PB0 | ;| Musste umgesetzt werden weil Settng | ;| nun den Pin nutzt | ;| | ;+------------------------------------------------------+ .include "avr.h" ;Reset und Interruptvektoren begin: rjmp main ;1 POWER ON RESET reti ;2 Int0-Interrupt reti ;3 Int1-Interrupt reti ;4 TC2 Compare Match reti ;5 TC2 Overflow reti ;6 TC1 Capture reti ;7 TC1 Compare Match A reti ;8 TC1 Compare Match B reti ;9 TC1 Overflow reti ;10 TC0 Overflow reti ;11 SPI, STC = Serial Transfer Complete reti ;12 UART Rx Complete reti ;13 UART Data Register Empty reti ;14 UART Tx Complete reti ;15 ADC Conversion Complete reti ;16 EEPROM Ready reti ;17 Analog Comparator reti ;18 TWI (I²C) Serial Interface reti ;19 Store Program Memory Ready ;-------------------------------------------------------- ;Start, Power on, Reset main: ldi r16,lo8(RAMEND) ; Stackpointer initialisieren out SPL,r16 ;----------------------- ; Lade Konstanten ldi r17,200 ; Wartezeit für Einschaltvorgang ca. 600us ldi r18,90 ; Batterievergleichswert ldi r19,200 ; Testwert ;----------------------- ; Setzte Ein-und Ausgänge cbi DDRB,2 ; PB2 Ist Eingang (Setting) sbi DDRB,1 ; PB1 Ist Ausgang (MOSFET) cbi DDRB,3 ; PB3 ist Eingang (Messung) cbi DDRB,4 ; PB4 ist Eingang (Batterie) cbi DDRB,5 ; PB5 ist Eingang (RESET) sbi DDRB,0 ; PB0 ist Ausgang (Status LED) ;----------------------- ; Initialisierung ADC cbi ADMUX,6 ; Externe Referenzspannung sbi ADMUX,5 ; linksorientiert (ADCH wird genutzt (8Bit)) sbi ADCSRA,7 ; ADC AN cbi ADCSRA,6 ; Starte cbi ADCSRA,5 ; Autotrigger Aus cbi ADCSRA,4 ; InterruptFLAG aus cbi ADCSRA,3 ; Interrupt aus sbi ADCSRA,2 ; Teilung (1) cbi ADCSRA,1 ; (0) sbi ADCSRA,0 ; Teilung Ende (1) ;-------------------------------------------------------- mainloop: cbi PORTB,0 ; Ausgang aus (LED) cbi PORTB,1 ; Ausgang aus (MOSFET) ;------------------------------- ; Einschaltvorgang abwarten wartePWon: dec r17 ; warte 600us brne wartePWon ;------------------------------- ; Batteriespannung Prüfen BatterieStart: sbi ADMUX,5 ; linksorientiert (ADCH wird genutzt (8Bit)) sbi ADMUX,1 ; Definiere Input Kanal (PB4 -> 1|0 ) cbi ADMUX,0 cbi PORTB,0 ; Ausgang aus (LED) sbi ADCSRA, 6 ; starte die Messung ADC_Bat: sbic ADCSRA, 6 ; warten auf Konvertierung rjmp ADC_Bat in r27,ADCH ; einlesen des High-Teils mov r25,r27 cpi r25,90 ; Vergleiche r25|mit 90 entspricht ca 1,7 V = 7V Batteriespannung brlo BatterieStart ; Wenn Batterie zu schwach überprüfe noch mal (Endlosschleife) sbi PORTB,0 ; LED an ;------------------------------- ; Seting erfassen SettingStart: cbi ADMUX,1 ; Definiere Input Kanal (PB2 (ADC1) -> 0|1 ) sbi ADMUX,0 sbi ADCSRA, 6 ; starte die Messung ADC_SET: sbic ADCSRA, 6 ; warten auf Konvertierung rjmp ADC_SET in r27,ADCH ; einlesen des High-Teils mov r25,r27 cpi r25,50 ; Vergleiche r25|mit 50 Ist 1V --> Setting 1 (GND) brlo Setting1 ; Springe zu Setting 1 (GND) cpi r25,130 ; Vergleiche r25|mit 120 Ist 2,5V --> Setting 2 (2V) brlo Setting2 ; Springe zu Setting 2 (2V) cpi r25,180 ; Vergleiche r25|mit 170 Ist 3,5V --> Setting 3 (3V) brlo Setting3 ; Springe zu Setting 3 (3V) cpi r25,230 ; Vergleiche r25|mit 220 Ist 4,5V --> Setting 4 (4V) brlo Setting4 ; Springe zu Setting 4 (4V) rjmp Setting5 ; wenn die Spannung noch höher ist, ist es Setting 5 (5V) ;------------------------------- ; Setting 1 Setting1: ldi r20,0b11001000 ; Einschaltspannung LowTeil ldi r21,0b00000000 ; Einschaltspannung HighTeil ldi r22,0b01100100 ; Ausschaltspannung LowTeil ldi r23,0b00000000 ; Ausschaltspannung HighTeil(muss 0 sein /bis 5V) rjmp Einschalt ;------------------------------- ;Setting 2 Setting2: ldi r20,0b00110100 ; Einschaltspannung LowTeil ldi r21,0b00000011 ; Einschaltspannung HighTeil ldi r22,0b11111111 ; Ausschaltspannung LowTeil ldi r23,0b00000000 ; Ausschaltspannung HighTeil(muss 0 sein /bis 5V) rjmp Einschalt ;------------------------------- ;Setting 3 Setting3: ldi r20,0b00110100 ; Einschaltspannung LowTeil ldi r21,0b00000011 ; Einschaltspannung HighTeil ldi r22,0b11111111 ; Ausschaltspannung LowTeil ldi r23,0b00000000 ; Ausschaltspannung HighTeil(muss 0 sein /bis 5V) rjmp Einschalt ;------------------------------- ;Setting 4 Setting4: ldi r20,0b00110100 ; Einschaltspannung LowTeil ldi r21,0b00000011 ; Einschaltspannung HighTeil ldi r22,0b11111111 ; Ausschaltspannung LowTeil ldi r23,0b00000000 ; Ausschaltspannung HighTeil(muss 0 sein /bis 5V) rjmp Einschalt ;------------------------------- ;Setting 5 Setting5: ldi r20,0b11101000 ; Einschaltspannung LowTeil ldi r21,0b00000001 ; Einschaltspannung HighTeil ldi r22,255 ; Ausschaltspannung LowTeil ldi r23,0 ; Ausschaltspannung HighTeil(muss 0 sein /bis 5V) rjmp Einschalt ;-------------------------------- ; Messung Einschalt: cbi ADMUX,5 sbi ADMUX,1 ; Definiere Input Kanal (PB3 -> 1|1 ) sbi ADMUX,0 sbi PORTB,0 ldi r30,250 loop: dec r30 brne loop cbi PORTB,0 sbi ADCSRA, 6 ; starte die Messung ADC_MesE: sbic ADCSRA, 6 ; warten auf Konvertierung rjmp ADC_MesE in r27,ADCH ; einlesen des High-Teils in r26,ADCL ; einlesen des Low-Teils cp r27,r21 ; Vergleiche Mes-High mit Einzug-High brlo Einschalt ; miss noch einmalwenn zu niedrig cp r26,r20 ; Vergleiche Mes-Low mit Einzug-Low brlo Einschalt ; miss noch einmalwenn zu niedrig sbi PORTB,1 ; Ausgang MOSFET AN Ausschalt: ; Einsprungspunkt Ausschaltspannung cbi ADMUX,5 sbi ADCSRA, 6 ; starte die Messung ADC_MesA: sbic ADCSRA, 6 ; warten auf Konvertierung rjmp ADC_MesA in r27,ADCH ; einlesen des High-Teils in r26,ADCL ; einlesen des Low-Teils cpi r27,0 ; Vergleiche Mes-High mit Einzug-High brne Ausschalt ; miss noch einmalwenn nicht gleich (0) Schränkt Messbereich ein! cp r26,r22 ; Vergleiche Mes-Low mit Einzug-Low brsh Ausschalt ; miss noch einmalwenn zu hoch oder gleich cbi PORTB,1 ; Ausgang MOSFET AUS rjmp BatterieStart ; Starte wieder bei der Batterieprüfung