;********************************************************************************************** ;Werte aus EEPROM lesen und im LCD ausgeben ;linke Hälfte EE_Read_L: ;EEPROM-Werte auslesen clr Cnt tst Flag_3 breq Ende_loop EE_Read_L_loop: clr Flag_3 rcall Wert_loesch_L ;die aktuelle Spalte erst löschen, bevor der neue Wert eingetragen wird ldi ZL, low(bis48h) ;Zeiger auf EEPROM Adresse ldi ZH, high(bis48h) add ZL, Cnt ;Zähler addieren adc ZH, R8 rcall EEPROM_read cpi temp, 8 ;je Page nur 8 Werte möglich brlo Kurve_L ;Sprung zur Ausgabe in der richtigen Page cpi temp, 8 brsh Kurve2_L Back_loop_L: inc Cnt cpi Cnt, 39 ;Ende der linken Hälfte erreicht? breq EE_Read_R rjmp EE_Read_L_loop EEPROM_read: sbic EECR,EEPE ;2prüfe ob der vorherige Schreibzugriff beendet ist rjmp EEPROM_read out EEARH, ZH out EEARL, ZL sbi EECR,EERE in temp, EEDR ;EEPROM Wert auslesen ret Ende_loop: ret ;rechte Hälfte EE_Read_R: ;EEPROM-Werte auslesen ldi Cnt, 39 ;Startwert für rechte Hälfte EE_Read_R_loop: rcall Wert_loesch_R ;die aktuelle Spalte erst löschen, bevor der neue Wert eingetragen wird ldi ZL, low(bis48h) ;Zeiger auf EEPROM Adresse ldi ZH, high(bis48h) add ZL, Cnt ;Zähler addieren adc ZH, R8 rcall EEPROM_read cpi temp, 8 brlo Kurve_R cpi temp, 8 brsh Kurve2_R Back_loop_R: inc Cnt cpi Cnt, 99 ;Ende der rechten Hälfte erreicht? breq Ende_loop rjmp EE_Read_R_loop ;Ausgabe in Page 7 der linken Hälfte Kurve_L: cbi LCDC, CS1 ;CS1 eingeschaltet sbi LCDC, CS2 ;CS2 ausgeschaltet clr Daten ldi Daten, LCD_SET_ADDRESS+25 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+7 ;X setzen rcall lcd_writecom ldi ZL,Low(Wertigkeit*2) ldi ZH,High(Wertigkeit*2) add ZL, temp adc ZH, R8 lpm Daten, Z ori Daten, 0b10000000 ;Nulllinie erhalten rcall lcd_writebyte Kurve_L_exit: rjmp Back_loop_L ;Ausgabe in Page 7 der rechten Hälfte Kurve_R: sbi LCDC, CS1 ;CS1 ausgeschaltet cbi LCDC, CS2 ;CS2 eingeschaltet ldi Daten, LCD_SET_ADDRESS-39 ;um 39 reduzieren, da Cnt von der linken Hälfte zu hoch ist add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+7 ;X setzen rcall lcd_writecom ldi ZL,Low(Wertigkeit*2) ldi ZH,High(Wertigkeit*2) add ZL, temp adc ZH, R8 lpm Daten, Z ori Daten, 0b10000000 rcall lcd_writebyte Kurve_R_exit: rjmp Back_loop_R ;Ausgabe in Page 6 der linken Hälfte Kurve2_L: cpi temp, 16 brsh Kurve3_L subi temp, 8 cbi LCDC, CS1 ;CS1 eingeschaltet sbi LCDC, CS2 ;CS2 ausgeschaltet ldi Daten, LCD_SET_ADDRESS+25 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+6 ;X setzen rcall lcd_writecom ldi ZL,Low(Wertigkeit*2) ldi ZH,High(Wertigkeit*2) add ZL, temp adc ZH, R8 lpm Daten, Z rcall lcd_writebyte rjmp Back_loop_L ;Ausgabe in Page 6 der rechten Hälfte Kurve2_R: cpi temp, 16 brsh Kurve3_R subi temp, 8 sbi LCDC, CS1 ;CS1 ausgeschaltet cbi LCDC, CS2 ;CS2 eingeschaltet ldi Daten, LCD_SET_ADDRESS-39 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+6 ;X setzen rcall lcd_writecom ldi ZL,Low(Wertigkeit*2) ldi ZH,High(Wertigkeit*2) add ZL, temp adc ZH, R8 lpm Daten, Z rcall lcd_writebyte rjmp Back_loop_R ;Ausgabe in Page 5 der linken Hälfte Kurve3_L: cpi temp, 24 brsh Kurve4_L subi temp, 16 cbi LCDC, CS1 ;CS1 eingeschaltet sbi LCDC, CS2 ;CS2 ausgeschaltet ldi Daten, LCD_SET_ADDRESS+25 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+5 ;X setzen rcall lcd_writecom ldi ZL,Low(Wertigkeit*2) ldi ZH,High(Wertigkeit*2) add ZL, temp adc ZH, R8 lpm Daten, Z ; ori Daten, 0b10000000 rcall lcd_writebyte rjmp Back_loop_L ;Ausgabe in Page 5 der rechten Hälfte Kurve3_R: cpi temp, 24 brsh Kurve4_R subi temp, 16 sbi LCDC, CS1 ;CS1 ausgeschaltet cbi LCDC, CS2 ;CS2 eingeschaltet ldi Daten, LCD_SET_ADDRESS-39 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+5 ;X setzen rcall lcd_writecom ldi ZL,Low(Wertigkeit*2) ldi ZH,High(Wertigkeit*2) add ZL, temp adc ZH, R8 lpm Daten, Z ; ori Daten, 0b10000000 rcall lcd_writebyte rjmp Back_loop_R ;Ausgabe in Page 4 der linken Hälfte Kurve4_L: cpi temp, 32 brsh Kurve5_L subi temp, 24 cbi LCDC, CS1 ;CS1 eingeschaltet sbi LCDC, CS2 ;CS2 ausgeschaltet ldi Daten, LCD_SET_ADDRESS+25 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+4 ;X setzen rcall lcd_writecom ldi ZL,Low(Wertigkeit*2) ldi ZH,High(Wertigkeit*2) add ZL, temp adc ZH, R8 lpm Daten, Z rcall lcd_writebyte rjmp Back_loop_L ;Ausgabe in Page 4 der rechten Hälfte Kurve4_R: cpi temp, 32 brsh Kurve5_R subi temp, 24 sbi LCDC, CS1 ;CS1 ausgeschaltet cbi LCDC, CS2 ;CS2 eingeschaltet ldi Daten, LCD_SET_ADDRESS-39 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+4 ;X setzen rcall lcd_writecom ldi ZL,Low(Wertigkeit*2) ldi ZH,High(Wertigkeit*2) add ZL, temp adc ZH, R8 lpm Daten, Z rcall lcd_writebyte rjmp Back_loop_R ;Ausgabe in Page 3 der linken Hälfte Kurve5_L: cpi temp, 40 brsh Kurve_Ende_L subi temp, 32 cbi LCDC, CS1 ;CS1 eingeschaltet sbi LCDC, CS2 ;CS2 ausgeschaltet ldi Daten, LCD_SET_ADDRESS+25 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+3 ;X setzen rcall lcd_writecom ldi ZL,Low(Wertigkeit*2) ldi ZH,High(Wertigkeit*2) add ZL, temp adc ZH, R8 lpm Daten, Z ; ori Daten, 0b10000000 rcall lcd_writebyte Kurve_Ende_L: rjmp Back_loop_L ;Ausgabe in Page 3 der rechten Hälfte Kurve5_R: cpi temp, 40 brsh Kurve_Ende_R subi temp, 32 sbi LCDC, CS1 ;CS1 ausgeschaltet cbi LCDC, CS2 ;CS2 eingeschaltet ldi Daten, LCD_SET_ADDRESS-39 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+3 ;X setzen rcall lcd_writecom ldi ZL, Low(Wertigkeit*2) ldi ZH, High(Wertigkeit*2) add ZL, temp adc ZH, R8 lpm Daten, Z ; ori Daten, 0b10000000 rcall lcd_writebyte Kurve_Ende_R: rjmp Back_loop_R ;***************************************************************************************************************** ;Werte der aktuellen Spalte in der linken Hälfte löschen Wert_loesch_L: cbi LCDC, CS1 ;CS1 eingeschaltet sbi LCDC, CS2 ;CS2 ausgeschaltet ldi Daten, LCD_SET_ADDRESS+25 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+3 ;X setzen rcall lcd_writecom ldi Daten, 0b10000000 rcall lcd_writebyte ldi Daten, LCD_SET_ADDRESS+25 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+4 ;X setzen rcall lcd_writecom clr Daten rcall lcd_writebyte ldi Daten, LCD_SET_ADDRESS+25 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+5 ;X setzen rcall lcd_writecom ldi Daten, 0b10000000 rcall lcd_writebyte ldi Daten, LCD_SET_ADDRESS+25 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+6 ;X setzen rcall lcd_writecom clr Daten rcall lcd_writebyte ldi Daten, LCD_SET_ADDRESS+25 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+7 ;X setzen rcall lcd_writecom ldi Daten, 0b10000000 rcall lcd_writebyte ret ;Werte der aktuellen Spalte in der rechten Hälfte löschen Wert_loesch_R: sbi LCDC, CS1 ;CS1 ausgeschaltet cbi LCDC, CS2 ;CS2 eingeschaltet ldi Daten, LCD_SET_ADDRESS-39 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+3 ;X setzen rcall lcd_writecom ldi Daten, 0b10000000 rcall lcd_writebyte ldi Daten, LCD_SET_ADDRESS-39 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+4 ;X setzen rcall lcd_writecom clr Daten rcall lcd_writebyte ldi Daten, LCD_SET_ADDRESS-39 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+5 ;X setzen rcall lcd_writecom ldi Daten, 0b10000000 rcall lcd_writebyte ldi Daten, LCD_SET_ADDRESS-39 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+6 ;X setzen rcall lcd_writecom clr Daten rcall lcd_writebyte ldi Daten, LCD_SET_ADDRESS-39 add Daten, Cnt rcall lcd_writecom ldi Daten, LCD_SET_PAGE+7 ;X setzen rcall lcd_writecom ldi Daten, 0b10000000 rcall lcd_writebyte ret Wertigkeit: .db 128,64,32,16,8,4,2,1