- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 4 von 4

Thema: Kann das mal jemand überprüfen?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    11.03.2005
    Ort
    Kissing bei Augsburg
    Alter
    34
    Beiträge
    443

    Kann das mal jemand überprüfen?

    Anzeige

    E-Bike
    Hallo,

    ich habe mir gestern meine ersten Mikrocontroller mit der passenden Harware zusammen gelötet und es scheint als würde alles funktionieren bin stolz drauf

    so nun meine Frage:
    Kann das mal jemand überprüfen und mir gegebenen fals sagen ob es funktioniert oder nicht und wenn nicht was ist flasch und noch was wie lange baut er für die while schleife?
    hier der code:

    Code:
     $regfile = "m8def.dat"
     $crystal = 4000000
     Dim Temperatur(288) As Integer
     Dim Meswiederkehr As Long
     Dim Meunds As Long
     Dim Ausgang As Long
    
    
     On Urxc Onrxd                                              'Interrupt-Routine setzen
     Enable Urxc                                                'Interrupt URXC einschalten
     Enable Interrupts                                          'Interrupts global zulassen
    
    Ddrd = &B00000101                                           'PD0 und PD2 als augang und der rest als eingang
    Kondensaorlader Alias Portd.0                               'PD0 wird mit  Kondensaorlader angsprochen
    Widerstand Alias Portd.1                                    'PD1 wird mit widerstand angesprochen
    Lader Alias Portd.2                                         'PD2 wird mit lader angesrochen
    
     Kondensaorlader = 1                                        'PD0 wird auf high gezogen
    
     For Meunds = 1 To 288 Step 1                               'kleine for schleife
     Lader = 1                                                  'PD2 wird auf high gezogen
     While Widerstand = 1 And Meswiederkehr > 5000000           'wenn port an ist dann ende sonst weiter in der schleife bis meswiederkehr > 5000000
     Meswiederkehr = Meswiederkehr + 1                          'Meswiederkehr um eine erhöhen
     Wend
     Lader = 0                                                  'PD2 auf low setzen
     Temperatur(meunds) = Meswiederkehr                         'Meswiederkehr in das temperatur array schreiben
     Wait 300                                                   'hier soll 5 minuten gewartet werden
     Next                                                       'hier wird wieder zum anfang der for schleife gesprungen
    
    
    
    
    
    Onrxd:                                                      'anfang des interupts
                                                         '
       For Ausgang = 1 To 288 Step 1                            'hier wird der interupt bearbeitet
       Printbin Temperatur(ausgang)                             'hier auch noch
       Next                                                     'und hier auch
    Return
    so das ist der code und die hardware:


    Bild hier  

    Ich hoffe ihr könnt damit was anfangen

    mfg
    Michael
    Besuch mal meine HP: www.highcurrent.de

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Hi Michael,

    also der Anschluss des Elko direkt an die Ports kann
    ziemliich ins Auge gehen ... die treiben nur 20mA,
    darüber kann der µC schaden nehmen.
    Einen Vorwiderstand zur Strombegrenzung sollts schonmal geben.

    Die while-wend-Schleife wird nicht ganz nach Wunsch laufen
    denke ich. das AND ist beim Bascom mit der binären Operation
    UND-Verknüpfung verwendet.

    der 500000er Zähler will mir nicht so recht gefallen ...
    schon mal an den Timer gedacht?
    Wenn ichs richtig verstanden hab ist der nur dazu da
    den Programmablauf bis zur nächsten Messung zu unterbrechen.
    Das lässt sich mit nem Timer und einer
    Interrupt-routine schöner lösen.
    Der Vorteil dabei, der µC kann der weil bis der Timer abgelaufen
    ist was Anderes machen, hängt also nicht in der Schleife fest,
    oder du kannst ihn in nen Sleepmode setzen, der dann mit
    dem Timerinterrupt aufgehoben wird, das spart z.B. Bateriestrom.

    EDIT: selbiges gilt auch für den Wait-Befehl
    Die Festlegung von dem Array auf 288 ist auch etwas
    unschön ... ich würde da das array auf 255 kürzen,
    dann könntest du

    Dim Ausgang As Byte ... das spart RAM

    Byte (1 byte).
    Bytes are stores as unsigned 8-bit binary numbers

    vs.

    Long (four bytes)
    Longs are stored as signed 32-bit binary numbers

    oder wenns größer sein muss als Word deklarieren:
    Word (two bytes).
    Words are stored as unsigned sixteen-bit binary numbers
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    11.03.2005
    Ort
    Kissing bei Augsburg
    Alter
    34
    Beiträge
    443
    Hallo,

    ok ich sehe ein das es ein versuch ist und höchtwarscheinlich bleiben wird. Wie man schon in dem Bilde der Hardware sieht möchte ich die temeratur aufzeichenen und dann mit einem Interupt befehl vom terminal programm abhole. So den Kondensator kann ich auch dirket auf VCC und nocht an PD0 setzten. Dann wäre glaube ich das Problem mit dem Kondensator geklärt.
    Das Array möchte ich bei 288 lassen weil ich dann alle 5 Minuten eine Messung bekomme 24 h zeit habe die messungen abzuholen.
    Noch mal zur hardware und zum Programm:
    Es soll genaugenommen ein Widerstand zwischen ca 100 Ohm und (haltet euch fest) 10MOhm bestimmt werden.
    Wer Ideen hat wie ich es besser lösen kann ist mir recht. Ich habe auch schon an den ADC gedacht aber wie muss dann die Hardware aussehen?
    Und noch was: Die Daten werden dann alle am PC ausgewerdet und müssen dadurch nicht mit dem µC ausgewertet werden. Es soll auch die Zeit zwischen zwei Messungen von 10s bis zu 5h einfach einstellbar sein. Was ich ja mit dem wait befehl versucht habe.

    Ich hoffe ihr könnt damit was anfangen
    mfg
    Michael
    Besuch mal meine HP: www.highcurrent.de

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    11.03.2005
    Ort
    Kissing bei Augsburg
    Alter
    34
    Beiträge
    443
    So habe noch mal geprogselt und was anderes:

    Code:
    $regfile = "m8def.dat"                                      ' atmega8
    
    $crystal = 4000000
    
    $baud = 19200
    
    $hwstack = 32                                               ' default use 32 for the hardware stack
    
    $swstack = 10                                               'default use 10 for the SW stack
    
    $framesize = 40                                             'default use 40 for the frame space
    
    On Urxc Onrxd                                               'Interrupt-Routine setzen
     Enable Urxc                                                'Interrupt URXC einschalten
    Enable Interrupts
    
    Dim Widerstand As Long
    Dim Saver As Integer
    Dim Ausgang As Integer
    Dim Sender As Integer
    Dim W As Word
    Dim I As Integer
    Dim Wi As Integer
    
    
    Config Adc = Single , Prescaler = Auto
    Ddrd = &B00000001                                           'PD0 als augang und der rest als eingang
    Kondensaorlader Alias Portd.0
    
    
    Start Adc
    
    
    
    '                                  _  ___   _     _   ___
    ''''''''''''''''''''''''''''''''''I_   I   I_I   I_I   I '''''''''''''''''''''''''''''''''''''''
    '                                  _I  I   I I   I\    I
    
    
    Start:
    Kondensaorlader = 1                                         'PD0 anschalten
    
    
    For Widerstand = 0 To 500000 Step 1                         'for schleife in der der Widerstand gemssen werden soll
    W = Getadc(0)
    If W > 646 Then Goto Save                                   'wenn der adc wanderler rößer als 646 ist nach save weiter
    
    Next                                                        'Ende der For schleife
    
    Save:                                                       'unterrutine save
    
    Kondensaorlader = 0                                         'PD0 ausschalten um Kondensator um diode zu entladen
    
    If Saver > 8184 Then Goto Ended                             'wenn der eeprom voll ist das ende
    Saver = Saver + 6                                           'eeprom stelle zum schreiben um 6 erhöhen
    
    Writeeeprom Widerstand , Saver                              'in eeprom schreiben
    
    
    
    Wait 300                                                    '5 min warte
    
    Goto Start                                                  'wider zum anfang
    
    
    '                             ___   _    _    _           _   ___
    '''''''''''''''''''''I  I\ I   I   I_   I_I  I_I   I I   I_I   I ''''''''''''''''''''''''''''''''''''''''''
    '                    I  I \I   I   I_   I\   I\    I_I   I     I
    
    Onrxd:                                                      'anfang des interupts
                                                         '
       For Ausgang = 0 To 4184 Step 6                           'For schleife in der der Intrrupt bearbeitet wird
       Readeeprom Sender , Ausgang
       Print Sender                                             'hier auch noch
       Next                                                     'und hier auch
    Return
    
    
    
    
    '                                       _               _
    '''''''''''''''''''''''''''''''''''''''I_   I\ I   I\  I_  ''''''''''''''''''''''''''''''''''''''''''
    '                                      I_   I \I   I/  I_
    
    Ended:                                                      'ende des ganzens da eeprom voll ist
    Goto Ended
    und hier die Hardware:

    Bild hier  

    sorry für die schlechte Zeichnung ging auf die schnelle nicht anderes

    So dazu nun meine Fragen:

    Ist der eeprom danach voll oder ist er grad so am limit oder hat er noch platz?
    Wie lange braucht der µC um EIN mal die For schleife von anfang bis zum ende durch zulaufen? Also der der teil:
    Code:
    For Widerstand = 0 To 500000 Step 1                         'for schleife in der der Widerstand gemssen werden soll
    W = Getadc(0)
    If W > 646 Then Goto Save                                   'wenn der adc wanderler rößer als 646 ist nach save weiter
    
    Next                                                        'Ende der For schleife
    so das waren schon die Fragen.

    mfg
    Michael


    PS: Wenn ihr bessere Idee habt wie ich einen Wiederstand messen kann die werte dann abspeichern und späterüber eine Interrupt abrufen kann dann sagt es mir. DANKE
    Besuch mal meine HP: www.highcurrent.de

Berechtigungen

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

Solar Speicher und Akkus Tests