- LiFePO4 Speicher Test         
Ergebnis 1 bis 2 von 2

Thema: Analogeingang ohne Funktion?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627

    Analogeingang ohne Funktion?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,
    ich habe mir einen Datenlogger gebaut.

    Leider werden zwei Analogeingänge nicht richtig eingelesen. Es sieht so aus als wenn ich die Eingänge als Ausgänge programmiert hätte oder so.

    Auf der Platine habe ich diese beiden Eingänge entlötet(auch nachgemessen)! Wenn ich zwischen einem Eingang und Masse den Strom messe habe ich 51mA!!!(bei dem anderen Ausgang 20mA)

    Aufgefallen ist mir das, weil alle Analogeingänge mit je 10kOhm an Masse liegen und nur diese beiden Werte anzeigten: ADC1: 517 fest bzw. ADC2: 619...656

    Kann mir jemand sagen wo ich den Programmierfehler habe?
    Es geht um PA1/ADC1 und PA2/ADC2.

    Tobias

    Code:
    $regfile = "M644def.dat"
    $crystal = 20000000
    
    $hwstack = 200
    $swstack = 200
    $framesize = 400
    
    $baud = 19200
    
    
    '-------------------------------------------------------------------------------
    'Ein- Ausgänge:
    
    Ddra = &B00000000                                           '1 Ausgang, 0 Eingang = Pin PA7-0
    'Ddrb = &B00000000                                           '1 Ausgang, 0 Eingang = Pin PB7-0
    Ddrc = &B00000000                                           '1 Ausgang, 0 Eingang = Pin PC7-0
    Ddrd = &B11000000                                           '1 Ausgang, 0 Eingang = Pin PD7-0
    Config Pinb.4 = Output                                      'CS
    Config Pinb.6 = Input                                       'MISO / DO
    
    
    
    $include "config_mmc.bas"
    $include "config_avr-dos.bas"
    
    '-------------------------------------------------------------------------------
    'ALIAS
    J1 Alias Pinc.2                                             'Schalter logging
    J2 Alias Pinc.1
    J3 Alias Pinc.0                                             'LogZeit
    Led1 Alias Portd.6                                          'unten links
    Led2 Alias Portd.7                                          'unten rechts
    
    '-------------------------------------------------------------------------------
    Print "POWER ON..."
    Led2 = 1                                                    'LED rechts
    
    '-------------------------------------------------------------------------------
    'Timer0 = 8Bit
    'für Drehzahlmessung
    Config Timer0 = Timer , Prescale = 256                      'Teiler 256 = 78125Hz @ 20MHz
    On Timer0 Ontimer0overflow                                  'Unteprogramm aufrufen
    'Timer0 = Timer0vorgabe
    Enable Timer0                                               'timer einschalten
    
    
    
    
    'Timer1 = 16 Bit 10 mal pro Sek @ 20MHz
    Config Timer1 = Timer , Prescale = 64                       'Teiler 1/8/64/256/1024
    On Timer1 Ontimer1overflow                                  'Unteprogramm aufrufen
    Const Timer1vorgabe = 34286                                 '34286=10x/sek 49911=5x/sek
    Timer1 = Timer1vorgabe
    Enable Timer1                                               'timer einschalten
    
    
    'Timer2 = 8 Bit
    'Config Timer2 = Timer , Prescale = 1024                     'Teiler 1/8/64/256/1024
    'On Timer2 Ontimer2overflow                                  'Unteprogramm aufrufen
    'Const Timer2vorgabe = 111                                   '111 = 100x / sec
    'Timer2 = Timer2vorgabe
    'Enable Timer2                                               'timer einschalten
    
    
    '-------------------------------------------------------------------------------
    'Für RS232:
    On Urxc Onrxd                                               'Interrupt-Routine setzen
    Enable Urxc                                                 'Interrupt URXC einschalten
    Enable Interrupts                                           'Interrupts global zulassen
    '-------------------------------------------------------------------------------
    'Analogmessung:
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc                                                   'Starte analog Messung
    
    '-------------------------------------------------------------------------------
    'EEPROM Variablen:
    Dim Lognummer_ee As Eram Word                               'Anzahl der Loggings
    Dim Lognummer As Word
    
    '-------------------------------------------------------------------------------
    'Drehzahlmessung:
    Config Int0 = Falling                                       'wechsel von High auf Low
    On Int0 Drehzahl_0                                          'Interrupt-Routine
    
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    'Variablen:
    
    'SD
    Dim Tmpbyte As Byte                                         'zum initialisieren
    Dim Btemp1 As Byte                                          'zum initialisieren
    
    'Analogeingänge
    Dim K0 As Integer                                           'Spannung Empfänger
    Dim K1 As Integer                                           'Spannung Akku
    Dim K2 As Integer                                           'Strom Akku  Shunt
    Dim K3 As Integer                                           'Strom Akku Hallsensor
    Dim K4 As Integer                                           'RES
    Dim K5 As Integer                                           'RES
    Dim K6 As Integer                                           'RES
    Dim K7 As Integer                                           'Temp.
    
    
    Dim Anzahl As Long                                          'Zähler für schreiben
    Dim Anzahl_str As String * 6
    
    Dim Zu_schreiben As String * 70
    Dim Rec As Bit                                              'wird von J1 oder Empfänger(Pulsein) gesetzt
    Dim Rec_z As Word                                           'wird von Timer 1 hochgezählt 5*/sec
    Dim Rec_sd As Bit                                           'Datei öffnen schließen
    Dim Led As Word
    Dim Led_wert As Word                                        'Wert für blinken
    Dim Logzeit As Word                                         'Einstellung wie oft loggen
    Dim Loginfo As String * 20                                  'Text in txt Datei wie oft/sec geloggt wurde
    
    'RC-Empfänger auswerten
    Dim Pulsbreite1 As Word                                     'Knüppelstellung Knüppel 1
    Dim Pulsbreite11 As String * 3
    Dim Pulsbreite2 As Word                                     'Knüppelstellung Knüppel 2
    Dim Pulsbreite22 As String * 3
    
    'Drehzahlmessung
    Dim T01 As Byte                                             'Wert Timer0
    Dim T02 As Integer                                          'Wert Timer0 Anzahl Überläufe
    Dim Drehzahl_t01 As Byte
    Dim Drehzahl_t02 As Integer
    Dim Drehzahl As Single                                      'Drehzahl umgerechnet
    Dim Drehzahl1 As Word                                       'gerundeter Wert
    Dim Drehzahl_s As String * 6                                'Drehzahl für Ausgabe
    
    'RS232 Empfang
    Dim Slave As String * 3
    Dim Parameter As String * 10
    Dim Wert As String * 10
    Dim Ampere_rs As String * 4                                 'von der RS 232 Schnittstelle
    Dim Volt_rs As String * 4                                   'von der RS 232 Schnittstelle
    Dim E_byte As Byte , E_flag As Byte
    
    
    Dim Zyklus As Long                                          'incr bei jeder Do...Loop!
    '-------------------------------------------------------------------------------
    'Variablen belegen:
    
    Lognummer = Lognummer_ee                                    'Wert von EEPROM auslesen
    Print "lognummer: " ; Lognummer
    
    
    
    Waitms 500
    Print "START SD-Test..."
    
    '_______________________________________________________________________________
    'Init MMC/SD Card
    
    Tmpbyte = Driveinit()
        Print "Init: " ; Str(tmpbyte)
        Print "Trying to read File system..."
        Btemp1 = Initfilesystem(1)                              ' Partition 1
        Print "Btemp1: " ; Btemp1 ; " 0=ok"
    
    If Btemp1 <> 0 Then                                         'Wenn Fehler
    Print "Error: " ; Btemp1 ; " beim  Initialisieren des Dateisystems"
    Waitms 500
    Print "SD - FEHLER"
    Goto Fehler
    Else
    Print "SD-Card OK"
    End If
    
    
    '_______________________________________________________________________________
    'LogZeit Festlegen
    If J3 = 0 Then
    Logzeit = 1                                                 '10 mal pro Sek. loggen
    Loginfo = " (Log 10x / sek)"                                'Text in txt Datei
    Else
    Logzeit = 10                                                '1 mal pro Sek. loggen
    Loginfo = " (Log 1x / sek)"                                 'Text in txt Datei
    End If
    
    Print Loginfo
    
    
    Enable Int0                                                 'Drehzahlmessung 1 aktiv
    Enable Interrupts                                           'Interrupts global
    
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    'Hauptprogramm Do...Loop
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    Led1 = 1                                                    'LED unten links an
    Led2 = 0                                                    'LED unten rechts aus
    Do
    Incr Led                                                    'led hochzählen
    
    Toggle Led1
    
    'Aufnahme
    Rec = J1                                                    'Jumper zum Aufzeichnen
    
    
    
    
    'Steuerung LED2(rechts) für "logging ON/OFF"
    If J1 = 1 And Rec_sd = 1 Then
       Led2 = 1                                                 'LED unten rechts an                                         'langsam
    Else
       Led2 = 0                                                 'LED unten rechts aus
    End If
    
    
    '-------------------------------------------------------------------------------
    'Datei öffnen und schließen
    If Rec = 1 And Rec_sd = 0 Then
    Open "LOG.txt" For Append As #1
    Print #1 , "#Lognummer: " ; Lognummer ; Loginfo
    Print #1 , "#Nr.  ;K0 RC mV;K1 BATT mV;K2 SHUNT A;K3;K7 Temp;RC SOLL;Drehzahl;A&mV_RS"
    Incr Lognummer                                              'LogNummer hochzählen und
    Lognummer_ee = Lognummer                                    'in EEPROM übertragen
    Rec_sd = 1
    End If
    If Rec = 0 And Rec_sd = 1 Then
    Close #1
    Print "SD geschlossen"
    Rec_sd = 0
    End If
    
    
    
    '===============================================================================
    'Eingänge Auswerten:
    
    'Empfänger einlesen
    Pulsein Pulsbreite1 , Pinc , 7 , 1                          'Pulsbreite auslesen (1=High Impuls)
    
    
    
    'Analogkanäle einlesen
    K0 = Getadc(0)                                              'Wert aus Analogeingang laden
    K1 = Getadc(1)                                              'Wert aus Analogeingang laden
    K2 = Getadc(2)                                              'Wert aus Analogeingang laden
    K3 = Getadc(3)                                              'Wert aus Analogeingang laden
    'K4 = Getadc(4)                                              'Wert aus Analogeingang laden
    'K5 = Getadc(5)                                              'Wert aus Analogeingang laden
    'K6 = Getadc(6)                                              'Wert aus Analogeingang laden
    K7 = Getadc(7)                                              'Wert aus Analogeingang laden
    
    Print K0 ; ";" ; K1 ; ";" ; K2 ; ";" ; K3
    
    
    
    'Drehzahl umrechnen
    'T0 zählt mit 78125 Schritte / Sec
    'Drehzahl in Sek/Schritt = 1/78125*(x Schritte + Zählerüberläufe*256)
    
    Drehzahl = Drehzahl_t02 * 256                               'Überläufe auswerten
    Drehzahl = Drehzahl + Drehzahl_t01                          'Überläufe + Zählerstand von T0
    Drehzahl = Drehzahl * 0.0000128
    Drehzahl = 1 / Drehzahl                                     'nun sind es Hz
    Drehzahl = Drehzahl * 60                                    'und nun UPM
    Drehzahl = Drehzahl / 2                                     'weil eine Umdrehung 2 Impulse bei mir bringt
    
    
    'ENDE Eingänge auswerten
    
    
    'RS232 Empfang
    If E_flag = 4 Then                                          'Empfangsstring komplett
      If Slave = "S1" Then                                      'wenn Daten für Slave1
    
           Select Case Parameter
    
                   Case "Ampere" : Ampere_rs = Wert             ' Print "#S1,Strom:" ; Wert
    
                   'Case "Volt" : Volt_rs = Wert                 ' Print "#S1,Strom:" ; Wert
    
    
                   Case Else : Print "Err."
    
           End Select
    
    
      End If
    
      'Daten auf jedenfall löschen
      Slave = ""                                                'Slave löschen
      Parameter = ""                                            'Parameter löschen
      Wert = ""                                                 'Wert löschen
      E_flag = 0                                                'Empfang neu setzen
    End If
    '===============================================================================
    
    
    
    'Logging
    If Rec = 1 And Rec_z => Logzeit Then
    Incr Anzahl
    Anzahl_str = Str(anzahl)
    Anzahl_str = Format(anzahl_str , "000000")
    
    'Alles in einen String zusammenfassen
    'Zu_schreiben = Anzahl_str + ";" + Str(k0) + ";" + Str(k1) + ";" + Str(k2) + ";" + Str(k3) + ";" + Str(k4) + ";" + Str(k5) + ";" + Str(k6) + ";" + Str(k7) + ";" + Str(pulsbreite1) + ";" + Str(drehzahl) + ";" + Ampere_rs + ";" + Volt_rs
    Zu_schreiben = Anzahl_str + ";" + Str(k0) + ";" + Str(k1) + ";" + Str(k2) + ";" + Str(k3) + ";" + Str(k7) + ";" + Str(pulsbreite1) + ";" + Str(drehzahl) + ";" + Ampere_rs
    Gosub Sd_schreiben
    
    'Print Rec_z                                                 'Kontrolle: wenn > 1 dann Zykluszeit zu groß d.h. kein Loggen 10x/sec möglich!
    Rec_z = 0                                                   'Variable von Timer zurücksetzen
    End If
    
    'Datensatznummer zurücksetzen
    If J1 = 0 Then                                              'Schalter logging = 0
    Anzahl = 0
    End If
    
    'Zyklus
    Incr Zyklus
    
    Loop
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    'Hauptprogramm Do...Loop       ENDE  -  ENDE  -  ENDE  -  ENDE  -  ENDE  - ENDE
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    
    
    
    
    '_______________________________________________________________________________
    'Daten auf SD - Card schreiben:
    
    Sd_schreiben:
    'Datei öffnen / erstellen wenn nicht vorhanden!
    'Open "LOG.txt" For Append As #1
    Print #1 , Zu_schreiben                                     'Variable auf SD schreiben
    'Print Zu_schreiben                                          'Variable auf COM / PC anzeigen
    
    'Close #1
    
    Return
    
    
    '_______________________________________________________________________________
    'bei SD Fehler
    Do
    Led1 = 0                                                    'Do...Loop Led aus
    Fehler:
    Print "Fehler!!!"
    Led2 = 1                                                    'Grüne LED blinken für FEHLER
    Waitms 500
    Led2 = 0                                                    'Grüne LED blinken für FEHLER
    Waitms 500
    Loop
    
    '_______________________________________________________________________________
    Ontimer1overflow:                                           '10 mal pro Sekunde
    Timer1 = Timer1vorgabe
    Incr Rec_z
    
    'Print Zyklus
    'Zyklus = 0
    
    Return
    
    
    
    '_______________________________________________________________________________
    Drehzahl_0:                                                 'Timer1-Capture
      T01 = Timer0                                              'Erst Timer0Wert sichern
      Timer0 = 0                                                'Sofort Timer-Reset
      Drehzahl_t01 = T01                                        'Timer0Wert
      Drehzahl_t02 = T02                                        'Anzahl der Timer0 Überläufe
      T02 = 0
    Return
    '_______________________________________________________________________________
    Ontimer0overflow:                                           'für Drehzahl messung
     Incr T02                                                   'Anzahl der Timer0 Überläufe
    Return
    
    
    '-------------------------------------------------------------------------------
    'RS232 - Empfang - Strom von LEM 400
    Onrxd:
    E_byte = Udr
    Select Case E_byte
      Case 35 : E_flag = 1                                      '"#" = Slave wird gesendet
      Case 44 : E_flag = 2                                      '"," = Parameter kommt
      Case 58 : E_flag = 3                                      '":" =
      Case 13 : E_flag = 4                                      '"13 / ENTER" = Empfang komplett
      Case Else : If E_flag = 1 Then Slave = Slave + Chr(e_byte)
                   If E_flag = 2 Then Parameter = Parameter + Chr(e_byte)
                   If E_flag = 3 Then Wert = Wert + Chr(e_byte)
    
    End Select
    
    
    Return

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    So,
    ich habe einen neuen µC bestellt, der ist nun angekommen und der Fehler ist weg!

    Ich kann mir zwar nicht erklären, warum der 1te µC kaputt ist, aber nun geht´s ja

    trotzdem vielen Dank an alle und guten Start in die neue Woche

    Tobias

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress