Befehl Pulsein unklar

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Befehl Pulsein unklar

      Hallo,
      ich habe mir mit einem ATTiny24 einen doppelten RC-Schalter gebaut (2 Kanäle als Eingang und 8 + 1 Schaltausgänge). Funktioniert soweit. Nur als ich einen Ausgang noch dimmen wollte ging das nicht mehr.
      Dann habe ich mal 4Kanäle vom Empfänger auf meine Versuchs-LP mit einem ATMega48 und einer LCD-Anzeige verdrahtet und ein kleines Test-Programm erstellt wobei ich am ende eine LED toggele.
      Wenn ich nur einen Kanal einlese erhalte ich an der LED eine Frequenz von ca. 25Hz, bei zwei Kanälen 12,4Hz, bei drei 8,35Hz und bei vier 6,20Hz. (interner takt vom ATMega ist 8 MHZ und DivideClock ist OFF).
      Die 4 Variablen haben bei Mittelstellung der Steuerknüppel auf der LCD den Wert 150 (also 1,5ms). Das sagt auch das Datenblatt so aus.
      Wenn ich DivideClock auf ON abändere und im Programm 1MHz als Quarzfrequenz eintrage messe ich einen Wert von 95 und bei 8Mhz als Quarzfrequenz im Programm einen Wert von 18.
      Übrigens die Pulse-Wiederholfrquenz ist ca. 20Hz.

      Jetzt meine Frage: Weiß jemand genau wie der Befehl Pulsein intern programmiert ist? Ich vermute, dass auf eine Low-High Flanke gewartet wird und der ATMega nichts weiter macht bis dieser zu Ende ist.
      Dann wird auf die Nächste Flanke gewartet.
      Ich denke dass ich diesen Befehl für meine Zwecke nicht nehmen kann und es anstatt mit den Timern versuchen werde.

      Danke und Gruß aus MD
      Jürgen
      Files
    • Der Befehl Pulsin wartet bis zu 65ms (2^16 µs) 655 ms (2^16 *10µs)und wenn nichts kommt, gehts weiter.
      Wenn deine RC-Signale in der falschen Reihenfolge abgefragt werden, dann dauert das Einlesen der 4 Pulse 4 mal so lange und das hast du am Ende auch so gemessen.
      Die Pulse kommen je nach Fernsteuerung vielleicht auch zu knapp hintereinander, so muss immer der nächste Zyklus abgewartet werden.
      Das Einlesen mit Timer kann zu Ungenauigkeiten führen, lieber auf einen externen interrupt gehen.

      P.S.: füg doch bitte in deinem Programm noch Stackwerte ein:
      $hwstack = 32
      $swstack = 32
      $framesize = 40
    • Danke Michael,
      die Genauigkeit ist wohl kein Problem, da ich die Kanäle als Schalter nehme. Also 15% Fehler ist noch akzeptabel. Die LP ist leider schon
      fertig (von JLCPCB) und dabei habe ich die Eingänge nicht als Interrupt genutzt.
      Aber die 655ms scheinen auch korrekt zu sein, denn wenn ich die Kanäle abziehe blinkt die LED langsam und das ERROR-Bit ist gesetzt.

      Aber wieso diese Stackwerte? Dachte das wären beim Weglassen die Grundeinstellungen. Ich verwende noch nicht mal bei meinem
      Ladegerät mit LCD und Drehgeber als Dateneingabe und 8 Unterprogramme solche Werte und es klappt. Aber ich werde mich mal demnächst
      schlau machen. Gibt bestimmt genügend Beiträge dazu.
    • HJH-MD wrote:

      Aber wieso diese Stackwerte? Dachte das wären beim Weglassen die Grundeinstellungen. Ich verwende noch nicht mal bei meinem
      Ladegerät mit LCD und Drehgeber als Dateneingabe und 8 Unterprogramme solche Werte und es klappt.
      Deine Stackwerte reservieren Programmspeicher, den du für die Ausführung von Unterprogrammen, Interrupts oder auch Print und Lcd brauchst.
      Ist da zuwenig reserviert, wird vom Nachbarbereich geholt und dann überschreiben die sich gegenseitig.
      Das führt dann zu seltsamen Verhalten vom Programm.

      HJH-MD wrote:

      Aber ich werde mich mal demnächst
      schlau machen. Gibt bestimmt genügend Beiträge dazu.
      sogar einen Lexikon-Eintrag:
      Stack-Werte richtig setzen
    • HJH-MD wrote:

      das wären beim Weglassen die Grundeinstellungen
      Sind das und zwar die unter Optionen-Compiler-Chip eingetragen wurden. Unabhängig vom ausgewähltem Chip. Es ist also nicht unbedingt nötig sie im Code einzutragen, wäre aber nützlich damit hier erkannt werden kann ob sie Probleme verursachen könnten.

      PS Ist der 48 der kleine Bruder vom 328p? Die gleichen Register?
    • Danke Pluto25,
      die werte stehen bei mir im Bascom-Compiler. Habe mich nie darum kümmern müssen.
      Der 328p scheint die gleichen Register zu haben. Habe bisher nichts abweichendes gefunden.
      Aber 4fach SRam, doppelter EEPROM, 16 of Touch Kanäle, self program memory. Habe diesen
      noch nicht eingesetzt bei den kleinen Anwendungen, die ich so habe. Mußte aber schon mal
      den 88 verwenden, da das Programm langsam zu groß wurde. Habe auch immer noch einen
      Programmer im Einsatz der nicht die AVR Studio.exe benötigt und auch nur unter Bascom
      läuft. Gibt es aber leider nicht mehr auf dem Markt.
    • HJH-MD wrote:

      of Touch Kanäle...
      Was ist das? Hat das mit der Qtouch Libary zu tun? Nie versucht.

      HJH-MD wrote:

      self program memory.
      Der 48 könnte auch einen Bootloder haben, aber ob dann noch genug fürs Programm bleibt? :D
      Auf der Suche fiel mir auf, das das Datenblatt vom 48 auch den 328 beinhaltet a_45_132ca9f5 somit sind die gleich (abgesehen von der Größe)
      Ich hab hier einen MK2 am PC und ein USBASP fürs Handy oder wenns mal langsam sein muß (16khz Takt)
      Die arbeiten auch ohne das AVR Studio. :thumbsup:
    • Ein MK2 am PC ohne Studio? Wie geht das? Wenn dann will ich das auch haben. Habe sogar noch Ponyprog2000.
      Sollte aber dann wohl ein anderer Beitrag werden. Kennen wir uns eigentlich schon vom VisualBasic-Forum? :?: