ATtiny2313RCLichtsteuerungStandard  2013-09-02
attiny2313_rc_lichtsteuerung_standard.c-Dateireferenz

Hauptfile des Projekts ATtiny2313 RC Lichtsteuerung Standard. Mehr ...

#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
#include "input_timer.h"
#include "blink_timer.h"
#include "batt_komp.h"
Include-Abhängigkeitsdiagramm für attiny2313_rc_lichtsteuerung_standard.c:

Makrodefinitionen

#define F_CPU   1000000UL
 

Funktionen

int main ()
 Hauptfunktion. Mehr ...
 
 ISR (WDT_OVERFLOW_vect)
 Interrupt Service Routine für Watchdog Timer. Mehr ...
 

Variablen

volatile uint8_t in0_puls_len = 0
 Zählerstand vom Input Timer (Timer0) = Pulslänge des Eingangs 1 -> Zählerstand * 64us = Pulslänge in ms. Mehr ...
 
volatile uint8_t blktm_oflow = 0
 Anzahl der Überläufe vom Blink Timer (Timer 1) -> Ein Überlauf entspricht 0,065s. Mehr ...
 
volatile uint8_t batt_full = 1
 Batteriestatus -> solange = 1 wird die Hauptschleife ausgeführt, wenn = 0 wird alles abgeschalten und der uC in den Schlafmodus versetzt. Mehr ...
 
volatile uint8_t no_sig = 0
 Status Empfänger Eingangssignal -> 0 = Signal vorhanden, 1 = kein Signal. Mehr ...
 

Ausführliche Beschreibung

Hauptfile des Projekts ATtiny2313 RC Lichtsteuerung Standard.

Autor
V. Pippan (webma.nosp@m.ster.nosp@m.@vpip.nosp@m.pan..nosp@m.at)
Datum
2013-08-30
Version
20130830

Copyright 2013, 2014 V. Pippan (webma.nosp@m.ster.nosp@m.@vpip.nosp@m.pan..nosp@m.at)

This file is part of ATtiny2313 RC Lichtsteuerung Standard.

ATtiny2313 RC Lichtsteuerung Standard is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or any later version.

ATtiny2313 RC Lichtsteuerung Standard is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with ATtiny2313 RC Lichtsteuerung Standard. If not, see
www.gnu.org/licenses.

Noch zu erledigen:
  • Umschalten der Zustände aus der Hauptschleife entfernen und in eine eigene Funktion packen -> diese Funktion wird nur ca. alle 17 ms benötigt (nach Erkennung eines Eingangsimpulses oder nach Wachtdog Überlauf) und muß nicht in der Hauptschleife andauernd überprüft werden -> uC länger im Schlafmodus? -> weniger Stromverbrauch
  • Volatile -> ISR Otimierung bei Zugriff auf blktm_oflow in blink_timer.c -> siehe mikrocontroller.net
  • Umschalten von Ein- / Aus und umgekehrt erst nach mehreren gleichen Eingangsimpuls längen
  • alle nicht benötigten uC Teile abschalten
  • Abspeichern der Einstellungen (Schaltpunkte, Blinkfolgen, etc.) im EEPROM -> weniger Speicherverbrauch im Flash, nicht hardcoded -> dann möglich umstellen über Jeti Protokoll
  • Ausgabe des Schaltzustandes über das Jeti Protokoll
  • Ändern der Schaltzeitpunkte, Blinkfrequenz, etc. über das Jeti Protokoll
  • Messen von PWM Tastverhältnisse siehe Atmel App Note

Makro-Dokumentation

#define F_CPU   1000000UL

Dokumentation der Funktionen

ISR ( WDT_OVERFLOW_vect  )

Interrupt Service Routine für Watchdog Timer.

Ein Überlauf des Watchdog Timer löst diesen Interrupt aus. Wenn für längere Zeit kein Empfänger Einganssignal anliegt wird der Watchdog Timer nicht zurückgesetzt. Dies führt zu einem Überlauf des Watchdog Timers und innerhalb dieser Routine wird die Variable no_sig auf 1 gesetzt. Dies führt zum Abschalten der Beleuchtung, falls diese vorher eingeschalten war.

int main ( )

Hauptfunktion.

Die Hauptfunktion enthält die Initialisierungen beim Programmstart und die Hauptschleife des Programms. Wird die Hauptschleife abgebrochen (= Batterie leer) werden die Lichter ausgeschalten, alle Interrupts deaktiviert, die Timer gestoppt und der uC in den Power Down Schlafmodus versetzt. Aus diesem Zustand kann der uC nur durch einen Reset (Anstecken eines geladenen Akkus) wieder aktiviert werden!

< Zählerstand bei dem Navigationslichter einschalten sollen (bei meinem Servotester -> 12, normal 21)

< Zählerstand bei dem Landelichter einschalten sollen (bei meinem Servotester -> 19, normal 26)

Hauptschleife

Die Hauptschleife wird ausgeführt solange die Variable batt_full = 1 ist. batt_full = 0 bedeutet einen leeren Akku und die Hauptschleife wird beendet.

Hier ist ein Graph, der zeigt, was diese Funktion aufruft:

Variablen-Dokumentation

volatile uint8_t batt_full = 1

Batteriestatus -> solange = 1 wird die Hauptschleife ausgeführt, wenn = 0 wird alles abgeschalten und der uC in den Schlafmodus versetzt.

volatile uint8_t blktm_oflow = 0

Anzahl der Überläufe vom Blink Timer (Timer 1) -> Ein Überlauf entspricht 0,065s.

volatile uint8_t in0_puls_len = 0

Zählerstand vom Input Timer (Timer0) = Pulslänge des Eingangs 1 -> Zählerstand * 64us = Pulslänge in ms.

volatile uint8_t no_sig = 0

Status Empfänger Eingangssignal -> 0 = Signal vorhanden, 1 = kein Signal.