- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 20

Thema: Atmega48 läuft auf eigener Platine nicht wie er soll!?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    40
    Beiträge
    647
    Hi,

    wenn du mit den verschachtelten Interrupts meine Messroutine und die Blinkroutine meinst, das ist schon so gewollt das die sich überlagern können. Weil ich so nicht erst warten muss bis er irgendwas erledigt hat. Ich kann also den momentanen Auftrag abbrechen und mit neuen bedingungen Versorgen.
    Wenn du das "enable" am ende der Routine meinst dann hast du sicher recht das ist so nicht gewollt!
    Das "disable Interrupts" und "disable timer" hab ich rausgenommen. Das "enable" dementsprechend natürlich auch.

    Ich hab mal als Stack
    Code:
    $hwstack = 50
    $swstack = 50
    $framesize = 50
    angegeben. Dann müsste ich ja noch 106 bytes für meine Variabeln über haben. Ist das so genug Stack?

    Getestet hab ichs noch nicht, da komme ich evtl. nachher noch zu.

    Danke
    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Hallo!

    Vieleicht liegts ja daran:

    Auszug aus der Hilfe
    var = RND( limit )


    Für was soll diese Random Aktion gut sein?

    MfG
    Rone

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    40
    Beiträge
    647
    Die RND() soll etwas variation in die Blinkerei bringen.

    Die RND-Funktion ist echt nicht das Gelbe vom Ei. Wie man sieht musste ich ja schon pfuschen um überhaupt einen Wert zwischen 0 und 10 zu bekommen:
    Code:
    Do
    I = Rnd()
    Loop Until I < 10
    weil das mit dem Limit scheinbar in Verbindung mit Interrupts nicht funktioniert. Dazu hab ich auch schon in einem anderen Thread Hilfe bekommen. Da sind wir eben auf diese Pfuschlösung gekommen.

    Danke
    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    40
    Beiträge
    647
    So habs gerade getestet. Jetzt läuft er fast wie er soll. Danke nochmal an alle die mir geholfen haben!!!

    Das einzige was mir jetzt nicht gefällt, ist meine pfusch RND() Lösung. Denn manchmal dauert es sehr lange -ein paar Millisekunden- bis er eine RND-Zahl unter 10 errechnet hat. Ich glaube das sich die abfolge der RND-Zahlen nach ca. 2-3 Sekunden wiederholt.

    Gibt es da eine andere Möglichkeit ohne äußere Beschaltung?
    Ich hätte da eine Idee, weiss aber nicht ob die so praktikabel ist. Was wäre wenn ich einfach am PC eine Liste von RND-Zahlen erstelle und diese ins EEPROM schreibe. Diese könnte mein Programm ja dann einfach nacheinander lesen und den Timer passend setzen. Das sich das ganze dann Irgendwann wiederholt ist mir klar aber das ist ja mit der RND Funktion auch nicht anders. Das EEPROM kann man doch unendlich oft lesen oder?
    Wie lange dauert es ca. bei 8Mhz ein Byte zu lesen?

    Edit: Sonst könnte ich ja...
    Code:
    DIM I as Byte            'am Anfang definieren
    '-------------------------------------------
    I = RND()
    I = I/25
    ... das wäre zeitlich konstanter und schneller. Denn RND() mit limit funktioniert nicht und wenn ichs so wie im Beispiel mache, ist es eine RND-Zahl ziwschen 0 und 255.
    Was meint ihr?

    Danke
    Gruß Daniel
    Geändert von DanielSan (09.08.2011 um 17:22 Uhr)
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hallo,
    ich habe gerade die RND Funktion mit Limit ausprobiert.

    DIM I as BYTE
    I = RND(10)

    funktioniert und erzeugt Zahlen von 0 bis 9. (BASCOM Vers 2.0.5.0)

    Wenn das bei Dir in der ISR nicht geht, könntest Du in der Hauptschleife eine Zufallszahl erzeugen und in der ISR benutzen?


    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Ähnliche Themen

  1. Atmega48 läuft mit 1Mhz statt 8Mhz
    Von DanielSan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 05.03.2011, 14:10
  2. Atmega48 tut nicht so wie ich will
    Von Halodri im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 04.12.2010, 10:17
  3. Eigener C Code auf ATTiny13 funktioniert nicht
    Von chaotic im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 26.04.2008, 10:29
  4. [läuft+Code] Servotest an ATtiny13 läuft nicht
    Von oberallgeier im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 18.10.2007, 16:49
  5. Antworten: 3
    Letzter Beitrag: 15.08.2005, 16:41

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress