ATMega328 Funktioniert nicht mit Wait?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • ATMega328 Funktioniert nicht mit Wait?

      Hallo,

      ich stehe mal gerade bissel auf dem Schlauch. Da ich die kleinen ATMega328 Pro Mini Module, welche es für paar Cent bei Ebay gibt, für einfache Anwendungen optimal finde, habe ich mir mal paar solche zugelegt.
      Da ich meine Miniprogramme stets mit Bascom(2.0.8.1) schreibe, dachte ich mir, ich teste gleich mal so ein Modul. Den Testaufbau erledigte ich auf so nem Steck-Board. Programmieren erfolgt über ISP und AVR-Studio4

      Also hier das eigentlich soo simple Miniprogramm

      Quellcode

      1. $regfile = "m328pdef.dat"
      2. $framesize = 32
      3. $swstack = 32
      4. $hwstack = 64
      5. $crystal = 16000000
      6. Config PinB.1 = Output
      7. Led1 Alias PortB.1
      8. LED1=0
      9. Do
      10. Toggle Led1
      11. Wait 1
      12. Loop
      Alles anzeigen
      Nach dem Überspielen mit dem Studio, was auch einwandfrei funktionierte, stellte ich fest, dass das Programm bis Zeile 13 ausgeführt wird und danach ein Reset erfolgt.
      Die LED leuchtet dauerhft.
      Der Code ist soooo simpel und trotzdem erkenne ich meinen Fehler nicht.

      Sicher ein Leichtes für Euch.

      Danke schon mal fürs Lesen.

      Ciao LK
    • Wie lange hast du gewartet? Könnte es sein, dass der Kontroller noch mit dem standardmäßigen 1MHz läuft? Dann würde es 16 Sekunden dauern, bis die Led wieder aus geht.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • six1 schrieb:

      BASCOM-Quellcode

      1. $regfile = "m328pdef.dat"
      2. $framesize = 32
      3. $swstack = 32
      4. $hwstack = 64
      5. $crystal = 16000000
      6. Config PortB.1 = Output
      7. Led1 Alias PortB.1
      8. Led1 =0
      9. Do
      10. Toggle Led1
      11. Wait 1
      12. Loop
      13. end.
      Alles anzeigen
      PORT and PIN can equally be used. PIN can be used to indicate that you set a single pin. And PORT can be used to indicate that you set the complete PORT. But they both do the same. Gilt jetzt nur im Zusammenhang mit config.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Es könnte aber auch eine falsch eingestellte Frequenz in den Fuse sein.
      Und nach dem ich es gerade getestet habe ist es auch die falsche angabe bei $crystal oder das nicht angepasst e Fuse-Bit.

      PS: Ich habe die Version von @LotharK verwendet und das End bei so einem simplen Programm braucht man da nicht.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Trexis5 schrieb:

      braucht man das end
      Damit er dort stehenbleibt. Wichtig wenn er nur einen Strang abarbeiten soll. (Also keine Main Loop hat)
      Sonst würde er undefinierte Flash zellen abarbeiten und damit sonstwas tun.
      Aber auch bei einer Main Loop ist es dann brauchbar falls er die irgendwie verläßt. Sonst läuft er dann quer duch die Subs deren endsub ihn sonstwohin schicken.
      Dann dreht er total durch a_217_27b18bee bevor der Watchdog ihn schnappt. Besser er wartet solange. a_30_7dc14a07
    • Hallo Tschoeatsch,

      es ist wirklich ein Fuse-Problem. Bisher habe ich für das Setzen der Fuses immer das AVR-Studio verwendet. Nach genauer Betrachtung sehe ich beim Einstellen des Typs unter "MAIN" > "DEVICES AND SIGNATURE BYTES"
      die Meldung: WARNING Signature does not match selected device. Gekauft habe ich die Module: Atmega 328 Pro und eingestellt habe ich ATMega328P sowie testhalber Atmega328. Bei beiden Einstellungen kam die Warnung.
      Unter Fuses ist CKDIF8 nicht angehakt. Zum Test habe ich das Miniprogramm noch mal modifiziert.

      BASCOM-Quellcode

      1. $regfile = "m328pdef.dat"
      2. $framesize = 32
      3. $swstack = 32
      4. $hwstack = 64
      5. $crystal = 16000000
      6. Dim I As Long
      7. Config PinB.0 = Output
      8. Config PinB.1 = Output
      9. Led1 Alias PortB.0
      10. Led2 Alias PortB.1
      11. LED1=1
      12. LED2=1
      13. For I=0 To 10000
      14. Next
      15. LED1=0
      16. LED2=1
      17. Waitms 500
      18. LED1=1
      19. LED2=0
      20. Do
      21. Loop
      22. end
      Alles anzeigen


      LED1 und LED2 gehen an - mehr nicht. Wäre es ein Timing-Problem, müßte es irgend wann mal umschalten. Tut es aber nicht. Da ich 3 dieser Module kaufte und der Effekt der gleiche ist, gehe ich mal nicht von einem Harwaredefekt aus. Wenn ich so ein Modul das 1. Mal auf das Board stecke, ohne es zu programmieren, werden alle B-Ports im Sekundentakt LOW/HIGH geschalten.

      Nun meine Frage: Wie bekommt Ihr das Programm in den CHIP? AVR-Studio war immer meine erste Wahl, funktioniert aber warscheinlich nicht mehr.
    • Ich noch mal.

      Bei genauer Betrachtung unter dem Mikroskop habe ich feststellen müssen, dass da ein ATmega168P verbaut ist. Mit diesen Einstellungen funktioniert das Programm. Also - mein Fehler.

      Ich danke aber allen, die sich die Mühe machten, meinen Thread zu lesen. Auch seien alle vor dem Kauf gewarnt. Die Beschreibungen, welche für die 328 Mini Pro Module 5V im INet kursieren, geben immer eine Eingangsspannung von 5-X Volt an. Auf meinem Chip ist kein Spannungsregler verbaut. Das habe ich erfolgreich getestet. :rolleyes:

      Ich wünsche noch einen schönen Tag.
    • Da gibt es schon 'komische' Angebote. Manche sind klar und falsch, wie 'Pro Mini Module Atmega168 5V 16M For Arduino Compatible Nano replace Atmega328', andere eher betrügerisch.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hallo Tscheatsch,

      na ja, manchmal ist es schon eigenartig. Aber wenn man richtig liest, und sich eingehend damit beschäftigt, ist es schon OK. So ein Modul für gerade mal einen EURO, besser geht es nicht. Für mich ist der 168er für die meisten Belange total ausreichend. Ich habe jedenfalls gerade noch mal 20 bestellt.

      Übrigens hatte ich genau so einen wie oben beschrieben bestellt. In den detailierten Angaben stand dann auch ATMega168. Ich hab einfach nicht genau genug geschaut.

      Mal noch eine Frage. Wie setzt Du die Fuses? Ich habe immer das AVR-Studio bemüht. Sicher geht das einfacher, oder? Ich hab es unter BASCOM noch nicht gefunden.

      Ciao Lothar
    • Ich flashe auch direkt aus bascom. Du musst halt deinen Programmieradapter in bascom einrichten. avrhelp.mcselec.com/options_programmer.htm
      Wenn du dann auf Brennen gehst
      avrhelp.mcselec.com/program_send_to_chip.htm
      dann kannst du in diesem Fenster auch die fuses setzen/kontrollieren.
      Das geht aber nur, wenn du die 'auto flash'-Option nicht wählst, in den Optionen vom programmer.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Das Disassemblieren nützt ja nur was, wenn man Assembler kann. bascom flasht gut, übersichtlich und ohne Programmwechsel. Aber, ist ja auch Geschmackssache, überreden will ich niemanden.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Das Disassemblieren nützt ja nur was, wenn man Assembler kann. bascom flasht gut, übersichtlich und ohne Programmwechsel. Aber, ist ja auch Geschmackssache, überreden will ich niemanden.
      Das nützt mir sogar viel, da ich mir dort anschauen kann welche Register eine ISR z.B. benutzt (und nur diese + SREG muß ich dann pushen/popen) und mein PC kann sogar mehrere Programme gleichzeitig ausführen, da brauch ich nur das Fenster wechseln :D ,mit meinem Mäuschen mal hier oder da klicken und sage und schreibe habe ich sogar noch mehr Programme gleichzeitig offen (HTerm, AVR Timer calc usw.) a_38_b45e201d
      Das schafft der a_22_9ac28a82
    • LotharK schrieb:

      Mal noch eine Frage. Wie setzt Du die Fuses? Ich habe immer das AVR-Studio bemüht.

      oscar schrieb:

      Ich verwende schon immer das AVR-Studio, einfacher gehts nicht.
      In dem Fenster, in dem du programmierst, ist rechts neben dem Reiter "Program" der Reiter "Fuses"
      Da drauf klicken. Dann öffnet sich das Fenster zum programmieren der Fuses. Dann suchst du
      in der Liste nach SUT_CKSEL. Da steht die momentane Einstellung der Takterzeugung.
      Mit dem Pfeil nach unten kann man ein Fenster öffnen, das alle möglichen Einstellungen anzeigt.
      Die gewünschte Einstellung anklicken und mit "Program" die Fuses brennen. Mit "Verify" kann
      noch überprüft werden, ob die Einstellung stimmt.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Hallo tschoeatsch,

      danke für den Tipp. Ich habe in Bascom schon das STK500 eingestellt und das funktioniert auch. (Solange ich nicht im AVR war) . An die Fuses habe ich mich mittels BASCOM noch nicht rangetraut. Disassemblieren hab ich noch nicht genutzt. Obwohl ich die ersten 5-6 Jahre alles im AVM-Studio programmiert habe. Mit Assembler habe ich mich nie wirklich angefreundet. Bascom ist so easy. Ich werde mal die Fuse-Einstellungen mittels BASCOM versuchen. Mehr als verfusen geht ja nicht. ^^ Ich werde es erst mal an meinen alten ATMega16ern testen.

      Danke und Ciao

      So wie es Oskar beschreibt, mach ich es bisher auch. Ist wirklich einfach und kaum Wissen erforderlich.