- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Simulation dauert extrem lang! wiso?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391

    Simulation dauert extrem lang! wiso?

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich habe ein kleines Basicprog geschrieben, wo er mir einfach nur über LCD den Timerwert anzeigen soll. Der Timer soll nicht geteilt werden, da es sich später um ganz genaue werte handeln soll. Ich wollte damit ein PWM Signal eines Fernsteuerungsempfängers auswerten. nun wollte ich das erstmal simulieren. doch er bleibt immer 2 Minuten bei $regfile"m8def.dat" stehen und geht erst dann weiter.

    Wenn ich das auf den Atmel übertrage, dann will er garnich etwas anzeigen.
    Wiso ist das so. Ich habe die schaltung schon vorher mit einem Testprogramm überprüft, da lief noch alles.

    Kann mir jemand sagen was ich falsch mache?

    Code:
    $regfile "m8def.dat"
    $crystal = 8000000
    
    Config Timer1 = Timer , Prescale = 1
    Config Int0 = Rising
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.1 , Rs = Portd.0
    Enable Interrupts
    Enable Int0
    On Int0 Sprung:
    Config Lcd = 16 * 2
    
    Config Portd.1 = Output
    Config Portd.7 = Output
    Config Portd.6 = Output
    Config Portd.5 = Output
    Config Portd.4 = Output
    
    
    
    
    Cls
    Do
    
    Start Timer1
    Loop
    
    
    
    Sprung:
    Stop Timer1
    Cls
    Locate 1 , 1
    Lcd Timer1
    Timer1 = 0
    Return
    hunni

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Dass der Bascom-Simulator langsam ist, ist normal. Die komplette Hardware eines AVR wird dort in Software nachgebildet, also jedes Register, jede Speicherstelle etc, was eben unheimlich viel Rechenzeit frisst.
    Du kannst oben bei den Direktiven noch $SIM dazuschreiben, hier werden alle Timer und alle anderen zeitabhängigen Vorgänge "vereinfacht", d.h. die Wartezeit wird rausgeworfen.

    Was an dem Programm nicht sonderlich gut gemacht ist, ist, dass der Timer in der Do:Loop ständig neu gestartet wird und in der ISR (Sprung) wieder gestoppt wird. Hat das nen bestimmten Grund?

    Zumal wurde der Timer vorher auch nie aktiviert (ENABLE Timer1)... evtl ist das der Grund, dass nichts passiert.
    #ifndef MfG
    #define MfG

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    ja das is einfach nur ein kleines programm um zu sehen, welchen wert der timer hat. ich weiss nich besonders toll gelöst, ich werd es etwas umschreiben. moment

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    cool geht ja viel schneller

    Code:
    $regfile "m8def.dat"
    $crystal = 8000000
    $sim
    Config Timer1 = Timer , Prescale = 1
    Config Int0 = Rising
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.1 , Rs = Portd.0
    Enable Interrupts
    Enable Int0
    On Int0 Sprung:
    Config Lcd = 16 * 2
    
    Config Portd.1 = Output
    Config Portd.7 = Output
    Config Portd.6 = Output
    Config Portd.5 = Output
    Config Portd.4 = Output
    
    
    
    
    Cls
    
    Do
    Loop
    
    
    
    Sprung:
    Lcd Timer1
    Timer1 = 0
    Return

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Nachtrag: Der Timer kommt (wenn er kommt) in dem Programm auch zu schnell; d.h. er löst schneller aus, als der Controller die Daten zum Display schicken kann.

    Im Grunde sieht das Programm schon besser aus, nur der "Enable Timer1" fehlt immer noch, da der Timer-interrupt damit erst eingeschaltet wird.
    #ifndef MfG
    #define MfG

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    mhh, stimmt merk ich auch gerade, was kann man da machen, einfach ein
    waitms 100 einfügen?

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Naja ein Wait bringt auch nix, da der Interrupt trotzdem kommt.
    Besser wär es, den Timer einfach auf einen sinnvollen Wert zu konfigurieren... Je nach dem wie oft was angezeigt werden soll so 1-2x pro Sekunde.
    #ifndef MfG
    #define MfG

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    wie soll ich das denn machen? weis gerad nich wie du das meinst

    Code:
    $regfile "m8def.dat"
    $crystal = 8000000
    $sim
    Config Timer1 = Timer , Prescale = 1
    Config Int0 = Rising
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.1 , Rs = Portd.0
    Enable Timer1
    Enable Interrupts
    Enable Int0
    On Int0 Sprung:
    Config Lcd = 16 * 2
    
    Config Portd.1 = Output
    Config Portd.7 = Output
    Config Portd.6 = Output
    Config Portd.5 = Output
    Config Portd.4 = Output
    
    
    
    
    Cls
    Start Timer1
    Do
    Loop
    
    
    
    Sprung:
    Stop Timer1
    Lcd Timer1
    Start Timer1
    Timer1 = 0
    Return

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Ahh... sorry, jetz seh ich ja erst, dass "Sprung" nicht durch den Timer ausgelöst wird sondern durch den Ext. Interrupt. Da ist dann natürlich kein Enable Timer1 nötig.

    Da sollte dann was passieren, wenn der INT0 ne steigende Flanke kriegt.
    Damit ist dann auch "egal", wie schnell der Timer läuft.
    #ifndef MfG
    #define MfG

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    ja ich kriege trotzdem nur eine zahl auf den LCD Display

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests