- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Timer & LCD anspruchsvoll bitte lesen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2005
    Alter
    37
    Beiträge
    140

    Timer & LCD anspruchsvoll bitte lesen

    Hallo,
    hier im nachfolgenden Programm wird eine Zeit eingestellt die rückwärts läuft.

    Bei null wird in eine Subroutine gesprungen und dort soll später ein servo angesteuert werden.
    Danach wird die Uhr wieder von vorne laufen gelassen.
    Und das im Loop.

    Das problem ist nur wenn die Uhr ca. 5-10 mal durchgelaufen ist erscheinen auf dem LCD, komische zeichen.

    00:00:01

    M00:00:0013 so in der art

    Dann dauert es noch 3-5 durchläufe und der Controller macht einen Reset.
    Leider weiß ich nicht weiter und finde den Fehler nicht.

    MFG
    Code:
    $regfile = "m8def.dat"                                      'Controller : ATMEGA8 (Atmel)
    $crystal = 7372800                                          '@ 7.2738 MHz
    
    Setclock Alias Pinb.1                                       'Button 1
    H Alias Pinb.2                                              'Button 2
    M Alias Pinb.3                                              'Button 3
    S Alias Pinb.4                                              'Button 4
    
    Config Lcd = 16 * 2                                         '20 x 4 (Spalten x Zeilen)
    'Config Lcdpin = Pin , E = Portb.5 , Rs = Portb.0 , Db7 = Portb.4 , Db6 = Portb.3 , Db5 = Portb.2 , Db4 = Portb.1
    Config Lcdpin = Pin , E = Portb.0 , Rs = Portb.1 , Db7 = Portb.5 , Db6 = Portb.4 , Db5 = Portb.3 , Db4 = Portb.2       'Belegung am MEGA8
    Config Lcdbus = 4                                           '4-Bit Bus
    Config Lcdmode = Port                                       '4-Bit Bus
    Config Portb = Output                                       'Portb in Ausgabe Modus (Display)
    
    Cls                                                         'RAM des Displays selektieren
    
    Portb = 63                                                  'Pullups von Portb anschalten
    
    Config Timer1 = Timer , Prescale = 1                        'Timer1 konfigurieren
    
    On Timer1 Timer1_isr                                        'Bei Überlauf in ISR springen
    
    Enable Interrupts                                           'Timer1 ist ein Interrupt also Interrupts einschalten
    
    Const Inter1 = 500                                          '1.Intervall für hochzählen
    Const Inter2 = 250                                          '2.Intervall für hochzählen
    Const Hi = 4                                                'Konstante zum Einstellen der Umschaltzeit des Intervalls
    Const Mi = 9                                                'Konstante zum Einstellen der Umschaltzeit des Intervalls
    Const Si = 9                                                'Konstante zum Einstellen der Umschaltzeit des Intervalls
    
    Dim Intervall As Word                                       'Intervallzeit für hochzählen
    Dim Mseconds As Word                                        'Millisekunden
    
    Dim Seconds As Byte                                         'Sekunden
    Dim Seconds1 As Byte
    Dim Minutes As Byte
    Dim Minutes1 As Byte                                        'Minuten
    Dim Hours As Byte
    Dim Hours1 As Byte                                            'Stunden
    Dim Temp As Byte                                            'Zusätzliche Variable für das Umschalten des Intervalls
    
    Dim Flag1 As Boolean                                        'Flag für den Spezialfall sek=9..0 (s.u.)
    Dim Setbutton As Boolean                                    '1.Button
    Dim Hb As Boolean                                           '2.Button
    Dim Mb As Boolean                                           '3.Button
    Dim Sb As Boolean                                           '4.Button
    
    '+--------------+
    '|Initialisieren|
    '+--------------+
    
    Do                                                          'DO-Schleife (Anfang)
       Locate 1 , 1                                             'Spalte 1 und Zeile 1 des Displays
       Lcd "Bitte Einstellen!"                                  'Displayausgabe für den Benutzer
       Waitms 50                                                '50 Millisekunden Warten um Flimmern zu vermeiden
       Gosub Buttons                                            'zur Subroutine für die Buttonabfage springen
       Cls                                                      'Display löschen
    Loop Until Setbutton = 1                                    'DO-Schleife (Ende wenn Button 1 gedrückt)
    
    Lcd Hours ; ":" ; Minutes ; ":" ; Seconds                   'Anzeige: 0:0:0
    
    '+----------+
    '|Einstellen|
    '+----------+
    
    Do
    
    '+-------+
    '|Stunden|
    '+-------+
    
       Gosub Buttons                                            'Buttonabfrage
       Intervall = Inter1                                       'Erstes Intervall auswählen (lang)
       While Hb = 1 And Setbutton = 1                           'Wenn beide Buttons gedrückt, dann folgendes ausführen
          Incr Hours                                            'Stunden erhöhen
          Incr Temp                                             'Temporäres Byte erhöhen, wichtig für die Intervallumschaltung
          If Temp > Hi Then Intervall = Inter2                  'Intervallumschaltung
          If Hours > 23 Then Hours = 0                          'Nach 23 wieder auf 0 springen
          Locate 1 , 1                                          'Display: 1.Spalte, 1.Zeile
          Lcd Hours ; ":" ; Minutes ; ":" ; Seconds             'Aktuelle eingestellte Zeit anzeigen
          Waitms Intervall                                      'Das Intervall abwarten
          Gosub Buttons                                         'Buttonabfrage
       Wend                                                     'Ende der Schleife
    
    '+-------+
    '|Minuten|
    '+-------+
    
       Gosub Buttons
       Intervall = Inter1
       While Mb = 1 And Setbutton = 1
          Incr Minutes
          If Minutes > Mi Then Intervall = Inter2
          If Minutes > 59 Then Minutes = 0
          Locate 1 , 1
          Lcd Hours ; ":" ; Minutes ; ":" ; Seconds
          Waitms Intervall
          Gosub Buttons
       Wend
    
    '+--------+
    '|Sekunden|
    '+--------+
    
       Gosub Buttons
       Intervall = Inter1
       While Sb = 1 And Setbutton = 1
          Incr Seconds
          If Seconds > Si Then Intervall = Inter2
          If Seconds > 59 Then Seconds = 0
          Locate 1 , 1
          Lcd Hours ; ":" ; Minutes ; ":" ; Seconds
          Waitms Intervall
          Gosub Buttons
       Wend
       Gosub Buttons
    Loop Until Setbutton = 0                                    'Ende der Schleife
    
    '+------------+
    '|Startabfrage|
    '+------------+
    
    Do
       Locate 1 , 1                                             'Display: 1.Spalte, 1.Zeile
       Lcd "Bitte starten!"                                     'Ausgabe für Benutzer
       Waitms 50                                                'Flimmern vermeiden
       Gosub Buttons                                            'Buttonabfrage
    Loop Until Setbutton = 1                                    'Dies solange ausführen bis Startknopf gedrückt
    
    Seconds1 = Seconds
    Minutes1 = Minutes
    Hours1 = Hours
    
    
    '+-----+
    '|Start|
    '+-----+
    Wiederholung:
    
    Seconds = Seconds1
    Minutes = Minutes1
    Hours = Hours1
    
    Cls                                                         'Display: löschen
    
    Enable Timer1                                               'Timer1 erst hier starten, da sonst die 1 Sekunde nicht richtig gezählt wird
    
    Do
    
    '+-------------+
    '|Millisekunden|
    '+-------------+
    
    If Mseconds >= 1000 Then
       Decr Seconds
       Mseconds = 0
    End If
    
    '+-----------+
    '|Spezialfall|
    '+-----------+
    
    If Seconds = 9 Then
       If Flag1 = 0 Then
          Cls
          Flag1 = 1
       End If
    End If
    
    '+--------+
    '|Sekunden|
    '+--------+
    
    If Seconds = 255 Then
       Decr Minutes
       Seconds = 59
       Flag1 = 0
    End If
    
    '+-------+
    '|Minuten|
    '+-------+
    
    If Minutes = 255 Then
       Decr Hours
       Minutes = 59
    End If
    
    '+-------+
    '|Stunden|
    '+-------+
    
    If Hours = 255 Then
          Hours = 23
          Minutes = 59
          Seconds = 59
    End If
    
    '+--------------------------+
    '|Anzeige der Aktuellen Zeit|
    '| führende Nullen anzeigen |
    '+--------------------------+
    
    Locate 1 , 1
    If Hours > 9 Then Lcd Hours
    If Hours < 10 Then Lcd "0" ; Hours
    Lcd ":"
    If Minutes > 9 Then Lcd Minutes
    If Minutes < 10 Then Lcd "0" ; Minutes
    Lcd ":"
    If Seconds > 9 Then Lcd Seconds
    If Seconds < 10 Then Lcd "0" ; Seconds
    
    If Hours = 0 And Minutes = 0 And Seconds = 0 Then Gosub Fertig       'Wenn Timervorgang beendet, dann in Subroutine springen
    
    Loop
    
    '+-----------+
    '|Subroutinen|
    '+-----------+
    
    Timer1_isr:                                                 'Interrupt Service Routine für den Timer1
       Timer1 = 59000                                           'Reloadwert ~ 59000
       Mseconds = Mseconds + 1                                  'Millisekunden erhöhen...
    Return                                                      '...und zurückspringen
    
    '+---------------------------------+
    '|Subroutinen für die Buttonabfrage|
    '+---------------------------------+
    
    Setc1:
       Setbutton = 1
    Return
    
    Hours1:
       Hb = 1
    Return
    
    Minutes1:
       Mb = 1
    Return
    
    Seconds1:
       Sb = 1
    Return
    '-------------------------------------------------
    Setc2:
       Setbutton = 0
    Return
    
    Hours2:
       Hb = 0
    Return
    
    Minutes2:
       Mb = 0
    Return
    
    Seconds2:
       Sb = 0
    Return
    
    '+-------------------------------------------------+
    '|Buttonabfrage mit Software-Entprellung der Tasten|
    '+-------------------------------------------------+
    
    Buttons:
       Config Portb = Input
       Portb = 63
       Debounce Setclock , 0 , Setc1 , Sub
       Debounce H , 0 , Hours1 , Sub
       Debounce M , 0 , Minutes1 , Sub
       Debounce S , 0 , Seconds1 , Sub
       '-----------------------------------------------
       Debounce Setclock , 1 , Setc2 , Sub
       Debounce H , 1 , Hours2 , Sub
       Debounce M , 1 , Minutes2 , Sub
       Debounce S , 1 , Seconds2 , Sub
       Config Portb = Output
    Return
    
    '+-------------------------------------------------------------+
    '|Subroutine wird ausgeführt, wenn der Timervorgang beendet ist|
    '+-------------------------------------------------------------+
    
    Fertig:
       Cls
       Goto Wiederholung
    
    Return

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.11.2005
    Ort
    QTH: JO43BC
    Alter
    56
    Beiträge
    112
    Hallo,

    ich sehe Du benutzt in Deinem Programm Gosub's. Hast aber keine $hwstack deklariert. Das kann auch nicht gut gehen. In der Bascom-Hilfe steht dazu:

    ------schnipp------
    The Hardware stack is room in RAM that is needed by your program. When you use GOSUB label, the microprocessor pushes the return address on the hardware stack and will use 2 bytes for that. When you use RETURN, the HW stack is popped back and the program can continue at the proper address. When you nest GOSUB, CALL or functions, you will use more stack space. Most statements use HW stack because a machine language routine is called.


    Mit freundlichen Gruessen
    Digitali

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2005
    Alter
    37
    Beiträge
    140
    es ist ein bisschen besser geworden habe das dazu gefügt:
    $framesize = 32
    $swstack = 32
    $hwstack = 32



    aber es stürtzt immer noch ab ...

    edit:
    scheint was mit der größe zun tun, zu haben.

    $framesize = 256
    $swstack = 256
    $hwstack = 256

    scheinbar läuft es nun.

    Vielen Dank

    Wie groß gehen sie denn maximal?

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2005
    Alter
    37
    Beiträge
    140
    Es geht nicht habe es jetzt schon so hoch
    $framesize = 1024
    $swstack = 1024
    $hwstack = 1024

    es kommen trotzdem noch komische zeichen auf dem LCD.
    Woran liegt das ist der stack irgendwann voll? Muss ich einen Speicher ab und zu leeren oder so.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2005
    Alter
    37
    Beiträge
    140
    Jetzt ein weiteres Problem.

    So stelle ich die Servos ein,
    1)
    wieder erscheinen komische zeichen auf dem Display.
    Es liegt auf jedenfall an dem hier.
    Mache ich das weg sind auch die zeichen weg.

    Config Servos = 1 , Servo1 = Portc.0 , Reload = 1
    Config Portc = Output
    Config Portc.1 = Output
    Config Pinc.7 = Input
    Portc.1 = 1
    Portc.7 = 0


    2)


    Das ist die Subroutine in die wird gesprungen wenn der Timer abgelaufen ist.s.u.

    Dort soll der Servo einmal auf mittelstellung für 1s und dann in vollrechts für 1s und wieder voll links bis zum nächsten Timerablauf wieder bei fertig: los geht.

    Der Servo bewegt sich vorher schon während der Timer läuft nach ganz links und bleibt dort.
    Der Timer läuft einmal ab und springt dann scheinbar in die Fertig:
    kommt da aber nicht mehr raus Servo bleibt ganz links.
    Hoffe ihr versteht mich.
    Bin jetzt seit 12 Stunden da dran und bekomme das nicht hin...


    Fertig:
    Disable Timer1
    Display Off
    Waitms 50
    Display On
    Cls
    Locate 1 , 1
    Lcd "Foto!!!"
    Servo(1) = 25
    Wait 1
    Servo(1) = 50
    Wait 1
    Servo(1) = 5.5
    Wait 1
    Cls
    Goto Wiederholung


    Code:
                               '+-----------------------------------------------------------------------------------------------------+
    '|                                         alpha_counter.bas                                           |
    '|Autor : Martin Weinberg                                                                              |
    '|Controller : ATMEGA8 (Atmel)                                                                         |
    '+-----------------------------------------------------------------------------------------------------+
    '|Genutzte Ressourcen :                                                                                |
    '|                                                                                                     |
    '|SRAM : 87.5 / 1024 Bytes (8.5 %)                                                                     |
    '|FlashROM : 2518 / 8096 Bytes (31.1 %)                                                                |
    '|EEPROM : 0 / 512 (0 %)                                                                               |
    '|Portb : 6 / 6 (Display und Buttons)                                                                  |
    '|Portc : 0 / 6                                                                                        |
    '|Portd : 0 / 8                                                                                        |
    '+-----------------------------------------------------------------------------------------------------+
    '|Zusätzliche Hardware :                                                                               |
    '|                                                                                                     |
    '|LCD:                                                                                                 |
    '|   Optrex DMC20434                                                                                   |
    '|   Spalten: 20                                                                                       |
    '|   Zeilen: 4                                                                                         |
    '|   Controller: HD44780A                                                                              |
    '|   Hintergrundbeleuchtung: ---                                                                       |
    '|                                                                                                     |
    '|Controllerboard : Standard-Controllerboard für den ATMEGA8 (Alpha Electronic Berger GmBH, Bielefeld) |
    '+-----------------------------------------------------------------------------------------------------+
    '|Programmiert mit : Bascom @ 1833 MHz                                                                 |
    '+-----------------------------------------------------------------------------------------------------+
    $regfile = "m8def.dat"                                      'Controller : ATMEGA8 (Atmel)
    $crystal = 7372800                                          '@ 7.2738 MHz
    $framesize = 2048
    $swstack = 2048
    $hwstack = 2048
    
    
    Setclock Alias Pinb.1                                       'Button 1
    H Alias Pinb.2                                              'Button 2
    M Alias Pinb.3                                              'Button 3
    S Alias Pinb.4                                              'Button 4
    
    Config Lcd = 16 * 2                                         '20 x 4 (Spalten x Zeilen)
    'Config Lcdpin = Pin , E = Portb.5 , Rs = Portb.0 , Db7 = Portb.4 , Db6 = Portb.3 , Db5 = Portb.2 , Db4 = Portb.1
    Config Lcdpin = Pin , E = Portb.0 , Rs = Portb.1 , Db7 = Portb.5 , Db6 = Portb.4 , Db5 = Portb.3 , Db4 = Portb.2       'Belegung am MEGA8
    Config Lcdbus = 4                                           '4-Bit Bus
    Config Lcdmode = Port                                       '4-Bit Bus
    Config Portb = Output                                       'Portb in Ausgabe Modus (Display)
    
    Config Servos = 1 , Servo1 = Portc.0 , Reload = 1
    Config Portc = Output
    Config Portc.1 = Output
    Config Pinc.7 = Input
    Portc.1 = 1
    Portc.7 = 0
    Cls                                                         'RAM des Displays selektieren
    
    Portb = 63                                                  'Pullups von Portb anschalten
    
    Config Timer1 = Timer , Prescale = 256                      'Timer1 konfigurieren
    
    On Timer1 Timer1_isr                                        'Bei Überlauf in ISR springen
    
    
    
    Const Inter1 = 500                                          '1.Intervall für hochzählen
    Const Inter2 = 250                                          '2.Intervall für hochzählen
    Const Hi = 4                                                'Konstante zum Einstellen der Umschaltzeit des Intervalls
    Const Mi = 9                                                'Konstante zum Einstellen der Umschaltzeit des Intervalls
    Const Si = 9                                                'Konstante zum Einstellen der Umschaltzeit des Intervalls
    
    Dim Intervall As Word                                       'Intervallzeit für hochzählen
    Dim Mseconds As Word                                        'Millisekunden
    
    Dim Seconds As Byte                                         'Sekunden
    Dim Seconds1 As Byte
    Dim Minutes As Byte
    Dim Minutes1 As Byte                                        'Minuten
    Dim Hours As Byte
    Dim Hours1 As Byte                                          'Stunden
    Dim Tseconds As Byte
    Dim Temp As Byte                                            'Zusätzliche Variable für das Umschalten des Intervalls
    
    Dim Flag1 As Boolean                                        'Flag für den Spezialfall sek=9..0 (s.u.)
    Dim Setbutton As Boolean                                    '1.Button
    Dim Hb As Boolean                                           '2.Button
    Dim Mb As Boolean                                           '3.Button
    Dim Sb As Boolean                                           '4.Button
    
    
    
    '+--------------+
    '|Initialisieren|
    '+--------------+
    
    Do                                                          'DO-Schleife (Anfang)
       Locate 1 , 1                                             'Spalte 1 und Zeile 1 des Displays
       Lcd "Bitte Einstellen!"                                  'Displayausgabe für den Benutzer
       Waitms 50                                                '50 Millisekunden Warten um Flimmern zu vermeiden
       Gosub Buttons                                            'zur Subroutine für die Buttonabfage springen
       Cls                                                      'Display löschen
    Loop Until Setbutton = 1                                    'DO-Schleife (Ende wenn Button 1 gedrückt)
    
    Lcd Hours ; ":" ; Minutes ; ":" ; Seconds                   'Anzeige: 0:0:0
    
    '+----------+
    '|Einstellen|
    '+----------+
    
    Do
    
    '+-------+
    '|Stunden|
    '+-------+
    
       Gosub Buttons                                            'Buttonabfrage
       Intervall = Inter1                                       'Erstes Intervall auswählen (lang)
       While Hb = 1 And Setbutton = 1                           'Wenn beide Buttons gedrückt, dann folgendes ausführen
          Incr Hours                                            'Stunden erhöhen
          Incr Temp                                             'Temporäres Byte erhöhen, wichtig für die Intervallumschaltung
          If Temp > Hi Then Intervall = Inter2                  'Intervallumschaltung
          If Hours > 23 Then Hours = 0                          'Nach 23 wieder auf 0 springen
          Locate 1 , 1                                          'Display: 1.Spalte, 1.Zeile
          Lcd Hours ; ":" ; Minutes ; ":" ; Seconds             'Aktuelle eingestellte Zeit anzeigen
          Waitms Intervall                                      'Das Intervall abwarten
          Gosub Buttons                                         'Buttonabfrage
       Wend                                                     'Ende der Schleife
    
    '+-------+
    '|Minuten|
    '+-------+
    
       Gosub Buttons
       Intervall = Inter1
       While Mb = 1 And Setbutton = 1
          Incr Minutes
          If Minutes > Mi Then Intervall = Inter2
          If Minutes > 59 Then Minutes = 0
          Locate 1 , 1
          Lcd Hours ; ":" ; Minutes ; ":" ; Seconds
          Waitms Intervall
          Gosub Buttons
       Wend
    
    '+--------+
    '|Sekunden|
    '+--------+
    
       Gosub Buttons
       Intervall = Inter1
       While Sb = 1 And Setbutton = 1
          Incr Seconds
          If Seconds > Si Then Intervall = Inter2
          If Seconds > 59 Then Seconds = 0
          Locate 1 , 1
          Lcd Hours ; ":" ; Minutes ; ":" ; Seconds
          Waitms Intervall
          Gosub Buttons
       Wend
       Gosub Buttons
    Loop Until Setbutton = 0                                    'Ende der Schleife
    
    '+------------+
    '|Startabfrage|
    '+------------+
    
    Do
       Locate 1 , 1                                             'Display: 1.Spalte, 1.Zeile
       Lcd "Bitte starten!"                                     'Ausgabe für Benutzer
       Waitms 50                                                'Flimmern vermeiden
       Gosub Buttons                                            'Buttonabfrage
    Loop Until Setbutton = 1                                    'Dies solange ausführen bis Startknopf gedrückt
    
    Seconds1 = Seconds
    Minutes1 = Minutes
    Hours1 = Hours
    
    
    '+-----+
    '|Start|
    '+-----+
    Wiederholung:
    
    Seconds = Seconds1
    Minutes = Minutes1
    Hours = Hours1
    
    
    
    Cls
    Enable Timer1
    Timer1 = 36736                                              'Timer1 erst hier starten, da sonst die 1 Sekunde nicht richtig gezählt wird
    Enable Interrupts
    Do
    
    
    
    '+-------------+
    '|Millisekunden|
    '+-------------+
    
    If Tseconds >= 1 Then
       Decr Seconds
       Tseconds = 0
    End If
    
    '+-----------+
    '|Spezialfall|
    '+-----------+
    
    If Seconds = 9 Then
       If Flag1 = 0 Then
          Cls
          Flag1 = 1
       End If
    End If
    
    '+--------+
    '|Sekunden|
    '+--------+
    
    If Seconds = 255 Then
       Decr Minutes
       Seconds = 59
       Flag1 = 0
    End If
    
    '+-------+
    '|Minuten|
    '+-------+
    
    If Minutes = 255 Then
       Decr Hours
       Minutes = 59
    End If
    
    '+-------+
    '|Stunden|
    '+-------+
    
    If Hours = 255 Then
          Hours = 23
          Minutes = 59
          Seconds = 59
    End If
    
    '+--------------------------+
    '|Anzeige der Aktuellen Zeit|
    '| führende Nullen anzeigen |
    '+--------------------------+
    
    Locate 1 , 1
    If Hours > 9 Then Lcd Hours
    If Hours < 10 Then Lcd "0" ; Hours
    Lcd ":"
    If Minutes > 9 Then Lcd Minutes
    If Minutes < 10 Then Lcd "0" ; Minutes
    Lcd ":"
    If Seconds > 9 Then Lcd Seconds
    If Seconds < 10 Then Lcd "0" ; Seconds
    
    
    
    If Hours = 0 And Minutes = 0 And Seconds = 0 Then Gosub Fertig       'Wenn Timervorgang beendet, dann in Subroutine springen
    
    Loop
    
    '+-----------+
    '|Subroutinen|
    '+-----------+
    
    Timer1_isr:
                                                           'Interrupt Service Routine für den Timer1
       Timer1 = 36736                                           'Reloadwert ~ 59000
       Tseconds = Tseconds + 1                                  'Millisekunden erhöhen...
    Return                                                      '...und zurückspringen
    
    '+---------------------------------+
    '|Subroutinen für die Buttonabfrage|
    '+---------------------------------+
    
    Setc1:
       Setbutton = 1
    Return
    
    Hours1:
       Hb = 1
    Return
    
    Minutes1:
       Mb = 1
    Return
    
    Seconds1:
       Sb = 1
    Return
    '-------------------------------------------------
    Setc2:
       Setbutton = 0
    Return
    
    Hours2:
       Hb = 0
    Return
    
    Minutes2:
       Mb = 0
    Return
    
    Seconds2:
       Sb = 0
    Return
    
    '+-------------------------------------------------+
    '|Buttonabfrage mit Software-Entprellung der Tasten|
    '+-------------------------------------------------+
    
    Buttons:
       Config Portb = Input
       Portb = 63
       Debounce Setclock , 0 , Setc1 , Sub
       Debounce H , 0 , Hours1 , Sub
       Debounce M , 0 , Minutes1 , Sub
       Debounce S , 0 , Seconds1 , Sub
       '-----------------------------------------------
       Debounce Setclock , 1 , Setc2 , Sub
       Debounce H , 1 , Hours2 , Sub
       Debounce M , 1 , Minutes2 , Sub
       Debounce S , 1 , Seconds2 , Sub
       Config Portb = Output
    Return
    
    '+-------------------------------------------------------------+
    '|Subroutine wird ausgeführt, wenn der Timervorgang beendet ist|
    '+-------------------------------------------------------------+
    
    Fertig:
       Disable Timer1
       Display Off
       Waitms 50
       Display On
       Cls
       Locate 1 , 1
       Lcd "Foto!!!"
       Servo(1) = 25
       Wait 2
       Servo(1) = 50
       Wait 2
       Servo(1) = 5.5
       Wait 2
    
       Cls
       Goto Wiederholung
    
    
    
    Return

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    ein bischen nachlesen wirst Du schon müssen, zB den Link vom PicNick.

    Der Mega8 hat nur 1024 Byte Speicher, und da müssen die ganzen Variablen und die Stacks reinpassen, also zusammen max. 1024 !

    Da Du keine Subs oder Functions benutzt, sind die Werte für $framesize und $swstack nicht so wichtig.
    Da du ISRs verwendest, stelle $hwstack auf 64 das sollte genug sein.

    Wieviel Platz die Variablen brauchen, sieht man im Report, der nach dem compilieren erstellt wird.
    Menu: Program -> Show result !

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2005
    Alter
    37
    Beiträge
    140
    SO jetzt habe ich den Stack auf 64 die zeichen sind verschwunden,danke.


    Jetzt habe ich immer noch das hier ..
    Sobald der Servo Konfiguriert wird läuft das irgendwie nicht mehr richtig.

    Config Servos = 1 , Servo1 = Portc.0 , Reload = 1

    Config Portc = Output
    !!!!!!!!!!!!!liegt bestimmt hier dran!!!! Wenn ich das so mache
    Config Portc.0 = Output bewegt sich nichts mehr

    Config Portc.1 = Output
    Config Pinc.7 = Input
    Portc.1 = 1
    Portc.7 = 0


    Es bleibt total lange in dieser Sub
    ohne das dort was vom Servo erwähnt wird woran liegt das?
    Nutzen Servo(1) und der Timer irgendwas gemeinsam.

    Fertig:
    Disable Timer1
    Display Off
    Waitms 50
    Display On
    Cls
    Locate 1 , 1
    Lcd "Foto!!!"
    Wait 1
    Cls
    Goto Wiederholung

    Der servo fängt an sich nach gaz links zu drehen sobald Enable Interrupts kommt und bleibt dort.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2005
    Alter
    37
    Beiträge
    140
    Code:
    $regfile = "m8def.dat"                                      'Controller : ATMEGA8 (Atmel)
    $crystal = 7372800                                          '@ 7.2738 MHz
    $framesize = 64
    $swstack = 64
    $hwstack = 64
    
    Config Servos = 1 , Servo1 = Portc.0 , Reload = 1
    Config Portc = Output
    Enable Interrupts
    Config Portc.1 = Output
    Config Pinc.7 = Input
    Portc.1 = 1
    Portc.7 = 0
    Do
    Servo(1) = 5.5
    Wait 3
    Servo(1) = 40
    Wait 3
    Loop
    End
    Das gleiche verhalten des Servo auch hier

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2005
    Alter
    37
    Beiträge
    140
    kann mir niemand helfen?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress