- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Power Down Mode ATmega8 - aufwecken durch Neustart

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    Anzeige

    E-Bike
    Hallo,

    Code ist für eine Steuerung von sog. KAP-Rig, Luftbildaufnahmen von einem Drachen bzw. einem Gestell an der Leine
    des Drachens aus!

    Das ganze ist noch im Entwicklungsmodus...

    ADC hatte ich gelesen, kann noch etwas Strom einsparen. Die gesamte Schaltung soll so wenig wie möglich Strom aufnehmen,
    wenn die Spannung unter 6,3 Volt fällt. Ziel ist nicht, diese über Interrupt ooder so aufzuwecken.

    Aufwecken halt nur über Neustart bzw. Reset wenn Spannungsversorgung neu angelegt wird!

    Bascom Version ist: 2.0.7.1

    "Powerdown" wird ganz unten unter "lipo_saver_off" aufgerufen!


    Code:
    '--------------------------------------------------------------------------
    ' Compilerinstruktionen und Compilerdirektiven
    '--------------------------------------------------------------------------
    
    $regfile = "m8def.dat"
    $crystal = 7372800                                          ' 7,3728 Mhz Quarzoszillator an PB6 / XTAL 1
    $hwstack = 64
    $swstack = 64
    $framesize = 64
    
    $baud = 9600
    
    
    '--------------------------------------------------------------------------
    ' Definition von Ressourcen
    '--------------------------------------------------------------------------
    
    Pwr_all Alias Portc.4                                       'Abschaltung der Servos und LM2675 (5V f¸r GPS, Video 5,8 GHz Tx)
    Pwr_gps Alias Portc.1
    Pwr_video Alias Portd.4
    
    Bit0 Alias Portc.2
    Bit1 Alias Portd.5
    Bit2 Alias Portb.5
    
    Cam_gnd Alias Portd.6
    
    Led_rot Alias Portc.5
    
    Pan1 Alias Portb.0                                          ' f¸r L293 D
    Pan2 Alias Portd.7
    
    
    
    '--------------------------------------------------------------------------
    ' Definition von Konstanten
    '--------------------------------------------------------------------------
    
    Const Adc_multi = 0.0048828125                              ' = 5.0 / 1024.0 -> ADC auflˆsen
    
    Const S1_links = 100                                        'je nach Servo!
    Const S1_rechts = 50                                        'je nach Servo!
    
    '--------------------------------------------------------------------------
    ' Definition von Variablen und Datentypen
    '--------------------------------------------------------------------------
    
    '---- Betriebsspannung messen ----
    Dim Spannung As Word
    Dim Zellspannung_orig As Single
    Dim Zellspannung As String * 5
    
    '---- Commands ----
    Dim Quittierung As String * 14
    Dim Gpshoehe As String * 13
    
    
    '---- Command empfangen xxx----
    
    Dim Cmd As Byte
    
    
    
    'Dim f¸r GPS einlesen
    Dim Gelesen As Byte                                         'eingelesenes Zeichen
    
    Dim Teilstring(14) As String * 12
    Dim Anzahl2 As Byte
    Dim Gpsdaten As String * 98
    Dim Header As String * 6
    'Dim Stunde As Byte
    Dim Tempstring As String * 2
    
    
    
    '---- Temperaturmessung ----
    Dim Temp(9) As Byte
    Dim X As Byte
    Dim Celsius As Integer
    Dim T As Single
    Dim Temperatur As String * 5
    
    '---- PWM f¸r A293D ----
    Dim A As Byte
    
    Dim Swert As Byte
    
    '--------------------------------------------------------------------------
    ' Konfiguration und Basiseinstellungen
    '--------------------------------------------------------------------------
    
    '---- CONFIG ----
    
    ' RS232 Hardware
    Config Serialin = Buffered , Size = 1                       ' konfig serial in
    Open "COMB.7:9600,8,N,1" For Input As #1                    'PB.7 = RxD SoftUART / GPS
    
    
    ' ADC
    Config Adc = Single , Prescaler = Auto , Reference = Avcc   'ADC Wandler definieren
    
    ' Servo
    Config Servos = 1 , Servo1 = Portb.2 , Reload = 10
    
    ' Timer f¸r PWM
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 8
    
    ' schaltbare Ausg‰nge
    Config Pwr_all = Output                                     ' GPS- und Video-Modul sowie 5 Volt Versorgung hierf¸r abschalten
    Config Pwr_gps = Output
    Config Pwr_video = Output
    
    Config Bit0 = Output
    Config Bit1 = Output
    Config Bit2 = Output
    
    Config Cam_gnd = Output
    
    ' Status-LED rot
    Config Led_rot = Output
    
    ' L293D f¸r Servo als Motor
    Config Portb.1 = Output
    Config Pan1 = Output                                        'LD293
    Config Pan2 = Output
    
    ' Servo PIN
    Config Portb.2 = Output
    
    '1wire f¸r Temp.-Messung
    Config 1wire = Portc.0                                      ' Pin f¸r 1wire Schnittstelle festlegen, Schnittstelle wird von Bascom durch Software realisiert
    
    'Interrupts
    Enable Interrupts
    Enable Timer1
    
    ' sonstige
    Start Adc
    Declare Sub Xbee                                            ' Senderoutine, um $GROUND#... permanent zu senden
    
    '--------------------------------------------------------------------------
    ' Init
    '--------------------------------------------------------------------------
    
    
    Pwr_all = 0                                                 ' bei Systemstart Peripherie auf OFF
    Pwr_video = 0
    Pwr_gps = 0
    
    Led_rot = 1                                                 ' Led_rot OFF
    
    Pan1 = 0                                                    'L293D OFF
    Pan2 = 0
    
    Bit0 = 0
    Bit1 = 0
    Bit2 = 0
    
    Cam_gnd = 1
    
    
    Swert = 100
    Servo(1) = Swert                                            'Servo
    
    'LED blinken lassen
    Led_rot = 1
    Waitms 100
    Led_rot = 0
    Waitms 100
    Led_rot = 1
    Waitms 100
    Led_rot = 0
    Led_rot = 1
    Waitms 100
    Led_rot = 0
    Waitms 100
    Led_rot = 1
    Waitms 100
    Led_rot = 0
    
    
    'nach einer Sek. Pwr_all ON
    Wait 1
    Pwr_all = 1
    
    'nach einer weiteren Sek. Pwr_gps ON
    Wait 1
    Pwr_gps = 1
    
    
    
    ' Begr¸flung
    
       Quittierung = "Hallo"
    
    
    Wait 2
    Cam_gnd = 0
    Waitms 150
    Cam_gnd = 1
    Cam_gnd = 0
    Waitms 150
    Cam_gnd = 1
    
    
    '--------------------------------------------------------------------------
    ' Hauptprogramm
    '--------------------------------------------------------------------------
    
    Do
    
    
    
    
    
    
       '========== hier laufen Tests ab ==========================================
    
    
    
    
    
       '==========Temperaturmessung mit DS18B20Z 1Wire============================
    
    
       1wreset
    
       1wwrite &HCC
       1wwrite &H44
       Waitms 600
    
       1wreset
       1wwrite &HCC
       1wwrite &HBE
    
    
       For X = 1 To 9
          Temp(x) = 1wread()
       Next
    
       Celsius = Makeint(temp(1) , Temp(2))
    
    
       T = Celsius / 16
    
       Temperatur = Fusing(t , "##.#")
    
    
    
       '==========Spannung LiPo 2S messen========================================
    
       Spannung = Getadc(3)                                     ' Zelle messen und berechnen
       Zellspannung_orig = Spannung * Adc_multi
       Zellspannung_orig = Zellspannung_orig * 2
       Zellspannung = Fusing(zellspannung_orig , "#.#")
    
       If Zellspannung_orig <= 6.4 Then                         ' Zellspannung unter/gleich 6,4 Volt (2x 3,2 Volt) dann...
          Gosub Lipo_saver_off
       End If
    
    
    
       '==========Rx Pr¸fen auf GPS Eingang GPGGA=================================
    
    
    
    
      Gelesen = Inkey(#1)
    
       If Gelesen = 36 Then Input #1 , Gpsdaten Noecho          '36 = $
          Header = Mid(gpsdaten , 1 , 5)
    
          If Header = "GPGGA" Then
             Anzahl2 = Split(gpsdaten , Teilstring(1) , ",")
             Gpsdaten = ""
             Gpshoehe = Teilstring(10)
    
       End If
    
    
    
    
       '==========Rx Pr¸fen auf Befehlseing‰nge==================================
    
      ' Inputbin Cmd
    
    
        If Ischarwaiting() = 1 Then
          Cmd = Inkey()
        End If
    
    
        Select Case Cmd
    
        Case "r"
           Clear Serialin
           Cmd = ""
           Quittierung = "rechts"
           Call Xbee
           A = 160
           Compare1a = A
           Pan1 = 0
           Pan2 = 1
           Waitms 70
           Pan1 = 0
           Pan2 = 0
    
    
        Case "R"
           Clear Serialin
           Cmd = ""
           Quittierung = "REchts"
           Call Xbee
           A = 160
           Compare1a = A
           Pan1 = 0
           Pan2 = 1
           Waitms 700
           Pan1 = 0
           Pan2 = 0
    
    
         Case "l"
           Clear Serialin
           Cmd = ""
           Quittierung = "links"
           Call Xbee
           A = 160
           Compare1a = A
           Pan1 = 1
           Pan2 = 0
           Waitms 70
           Pan1 = 0
           Pan2 = 0
    
    
        Case "L"
           Clear Serialin
           Cmd = ""
           Quittierung = "LInks "
           Call Xbee
           A = 160
           Compare1a = A
           Pan1 = 1
           Pan2 = 0
           Waitms 700
           Pan1 = 0
           Pan2 = 0
    
    
        Case "+"
           Clear Serialin
           Cmd = ""
           Quittierung = "S1 hoch  "
    
           Swert = Swert + 10
    
          Servo(1) = Swert
    
    
    
    
         Case "U"
           Clear Serialin
           Cmd = ""
           Quittierung = "S1 Hoch  "
    
           Servo(1) = S1_links
    
    
        Case "-"
           Clear Serialin
           Cmd = ""
           Quittierung = "S1 runter  "
    
           Swert = Swert - 10
    
           Servo(1) = Swert
    
    
    
        Case "D"
           Clear Serialin
           Cmd = ""
           Quittierung = "S1 Runter  "
    
           Servo(1) = S1_rechts
    
        Case "1"
           Clear Serialin
           Cmd = ""
           Quittierung = "LED     "
    
           Cam_gnd = 0
           Waitms 150
           Cam_gnd = 1
    
    
        End Select
    
    
         Call Xbee                                              ' kontinuierliches Senden der Parameter
    
    
    Loop
    
    
    
    End
    
    
    
    
    
    
    '----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------
    
    Lipo_saver_off:
       Quittierung = "LiPo-Saver!"                              ' Quittierung an Bodenstation
       Quittierung = ""                                         'Quittierung lˆschen
       Waitms 500
    
       Pwr_all = 0                                              ' testweise Ausgabe PWR_all = 0 --> hier: LED an!
       Led_rot = 1
    
       Disable Adc
       Disable Timer1
    
       Portb.7 = 0
    
       Powerdown
    
    
    Return
    
    
    '----------------Sonstiges------------------------------------------------------
    
    
    
    Link:
    
    Led_rot = 1
    
    Return
    
    
    
    No_link:
    
    Led_rot = 0
    
    Return
    
    
    
    Sub Xbee
    
        Print "$GROUND" ; "#" ; Quittierung ; "#" ; Zellspannung ; "#" ; Temperatur ; "#" ; Gpshoehe
    
    
    End Sub

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Warum schaltest du nicht den gesamten µC ab? Da du den µC mit neu Starten willst indem du die Versorgung trennst könntest du den µC von der Versorgung mit einem Transistor o.Ä. trennen. Wenn du den µC brauchst/neustartest überbrückst du den Transistor mit einem Taster. Der µC startet und schaltet den Transistor (wie eine Selbsthaltung). Sinkt die Spannung unter einen Wert schaltest du den µC mit dem Transistor ab. Wenn du einen Fet nimmst könntest du sogar im Betrieb Strom sparen (Widerstand am Gate nicht vergessen).

    MfG Hannes

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    Hallo Hannes!

    Stimmt eigentlich!

    Also:

    ein Ausgangspin schaltet grds. bei Start immer einen einen Fet durch, sodass die Schaltung läuft. Dann wird der Ausgangspin geschaltet und die Schaltung ist tot.

    Möchte ich die Schaltung starten, überbrücke ich den entsprechenden PIN!

    An dieser Stelle wird mir auch klar, was bei mir hier noch Strom zieht - es müsste der LM 2950Z sein!!!! Schitte - hatte ich vergessen.... dann schalte ich einfach mit dem FET dessen Stromversorgung...

    Danke!

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Stimmt. So kannst du alles abschalten was du nicht brauchst, inkl Spannungsregler, Sensoren falls vorhanden,...

    MfG Hannes

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    03.09.2011
    Beiträge
    72
    Hallo,
    jetzt möchte ich für eine andere Schaltung die Stromversorgung abschalten, wenn die
    Spannung unter eine bestimmte Schwelle fällt.

    Ich verwende diesen Schaltregler von Conrad: 167805 (Schaltregler Typ
    W78 Conrad W78-5V0 Gehäuseart Vertikal Ausgangsspannung 5 V
    Eingangsspannung 7 - 34 V Ausführung Schal).

    GND dieses Schaltreglers wird erst durch einen IRLU 2905 zugeschaltet.
    Zum Starten überbrücke ich den IRLU 2905 mittels eines Tasters. Dann
    wird der IRLU 2905 durch den AVR durchgeschaltet.

    Jetzt habe ich aber festgestellt, dass der IRLU 2905 ca. 7-8 Volt
    liefert, wenn abgeschaltet...

    Den zu groß dimensionierten IRLU 2905 verwende ich, da ich die für alles
    mögliche verwende und hier in großer Stückzahl habe.

    Ich verwende einen 100K Basis-Widerstand.


    Jetzt vermute ich, dass

    a) der Basiswiderstand falsch dimensioniert ist

    b) man den Schaltregler so nicht mittels eines FET steuern kann?


    Danke und Gruß

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 28.11.2008, 17:00
  2. [ERLEDIGT] ATmega8 initialisiert bei Power on nicht immer
    Von Crazy:Hardware im Forum AVR Hardwarethemen
    Antworten: 31
    Letzter Beitrag: 13.02.2007, 14:46
  3. Power down sleep mode
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 27.10.2006, 12:02
  4. POWER-DOWN MODE bei AVR?
    Von Rasuth im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 12.08.2006, 03:22
  5. Timer/Counter2 wake up Microcontrolle von Power-Save Mode
    Von janboejle im Forum AVR Hardwarethemen
    Antworten: 0
    Letzter Beitrag: 15.06.2005, 15:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests