Anweisung "Config Clockdiv = X"

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

    • Anweisung "Config Clockdiv = X"

      Kleines Testprogramm um die Auswirkungen der Anweisung "Config Clockdiv = X" auf "Wait" zu testen.
      Gruß Udo

      BASCOM Source Code

      1. '(-:
      2. *****************************************
      3. * Udo Lorenz *
      4. * 24.04.2019 *
      5. *****************************************
      6. ')
      7. '$sim
      8. $regfile = "m328pdef.dat"
      9. $crystal = 2000000 'Quarz ist 16Mhz, Fuses ist auf 16/8 eingestellt!
      10. 'Diese 1. Angabe ist fuer die IDE gueltig. Stehen weitere "$crystal" Angaben
      11. 'irgendwo im Programm, wird immer und nur der kleinste Wert benutzt.
      12. $hwstack = 80
      13. $swstack = 80
      14. $framesize = 100
      15. Config Portb.5 = Output
      16. Led Alias Portb.5
      17. Dim X As Byte , Z As Byte
      18. Declare Sub 16000000 'Clock
      19. Declare Sub 8000000 'Clock/2
      20. Declare Sub 4000000 'Clock/4
      21. Declare Sub 2000000 'Clock/8
      22. '***************************************************************************************
      23. Do
      24. If Z = 0 Then
      25. Call 16000000
      26. Z = Z + 1
      27. End If
      28. If Z = 1 Then
      29. Call 8000000
      30. Z = Z + 1
      31. End If
      32. If Z = 2 Then
      33. Call 4000000
      34. Z = Z + 1
      35. End If
      36. If Z = 3 Then
      37. Call 2000000
      38. Z = 0
      39. End If
      40. Loop
      41. End
      42. '***************************************************************************************
      43. 'Clockdiv moegliche Teiler: 1 , 2 , 4 , 8 ,16 , 32 ,64 , 128 und 256.
      44. '***************************************************************************************
      45. Sub 16000000 'Quarzfrequenz = 16000000
      46. Config Clockdiv = 1
      47. Wait 24 'Wait * 8 ist Realzeit (3*8=24)
      48. For X = 0 To 20
      49. Toggle Led
      50. Waitms 4000
      51. Next X
      52. X = 0
      53. End Sub
      54. '***************************************************************************************
      55. Sub 8000000 'Quarzfrequenz = 16000000/2
      56. Config Clockdiv = 2 'Wait * 4 ist Realzeit (3*4=12)
      57. Wait 12
      58. For X = 0 To 20
      59. Toggle Led
      60. Waitms 2000
      61. Next X
      62. X = 0
      63. End Sub
      64. '***************************************************************************************
      65. Sub 4000000 'Quarzfrequenz = 16000000/4
      66. Config Clockdiv = 4 'Wait * 2 ist Realzeit (3*2=6)
      67. Wait 6
      68. For X = 0 To 20
      69. Toggle Led
      70. Waitms 1000
      71. Next X
      72. X = 0
      73. End Sub
      74. '***************************************************************************************
      75. Sub 2000000 'Quarzfrequenz = 16000000/8
      76. Config Clockdiv = 8 'Wait * 1 ist Realzeit (3*1=3)
      77. Wait 3
      78. For X = 0 To 20
      79. Toggle Led
      80. Waitms 500
      81. Next X
      82. X = 0
      83. End Sub
      84. End
      Display All

      The post was edited 2 times, last by Udo01 ().

    • Michael wrote:

      Gibt es schon ein Ergebnis?
      Nun so großartige Ergebnisse waren da nicht zu erwarten. Die Hauptsachen sind im Programm kommentiert. Ich hab allerdings noch par Messungen durchgeführt und füge die hier mal noch mit ein.
      Fazit, bei Batteriegeräten wäre ein Einsatz von Clockdiv denkbar. Einfache Möglichkeit die Oszillatorfrequen anzupassen ohne in den Fuses rumzuschreiben. Das ist bestimmt für Arduino Nutzer hilfreich. Müsste man einmal untersuchen, was der Bootlader dazu meint.
      Gruß Udo
      Files

      The post was edited 2 times, last by Udo01 ().

    • Michael wrote:

      Welchen Grund gibt es für das Stoppen des Timers? Hattest du ein anders Programm für diesen Test?
      Wie eigentlich ersichtlich, habe ich den MC mit kleiner werdende VCC betrieben. Um die Funktion von Oszillator und ein laufendes Programm zu erkennen, hab ich ein 2. ganz einfaches Programm mit Timer1 benutzt, um einen Pinn mit 500 µs zu toggeln. Damit konnte ich auf den Oszi nun erkennen, wann die Programmausführung steckenbleibt. Der Grund für das Stoppen des Timers ist somit die geringe Betriebsspannung VCC. Der MC stellt somit bei 1,8 V seine Programmausführung einfach ein. Das sollte auch soweit im Datenblatt stehen, bei "32.2. Common DC Characteristics", was damit Nachvollzogen wurde. Was nicht nachvollziehbar war, ist die vorgeschriebene Spannung für Quarzoszillator "Datenblatt bei 16 MHz "0 - 20MHz @ 4.5 - 5.5V". Dieser funktionierte noch bis zu einer Spannung von 1,3V!
      Gruß Udo
    • Also funktioniert der ganze Chip nicht mehr. In deinem Text kam es so rüber, als ob nur Timer1 nicht mehr funktioniert.
      Wenn die vorgeschriebene Spannung des Oszillators bei > 4,5V liegt, dann ist das doch schön, wenn er erst bei <1,3V seinen Dienst einstellt?
      Ich hatte eher umgekehrt das Problem, dass der Quarz-Oszillator nicht anlief bei zu geringer Spannung, ein RC Keramik-Oszillator aber schon.

      Aus deinen Ergebnissen sehe ich, dass es durchaus sinnvoll ist, bei Batteriebetrieb einen geringeren Takt zu fahren, zumindest wenn man den Takt als Zeitgeber braucht.
      Die Effizienz ist ja bei höherem Takt deutlich besser, 8 facher Takt bei nur doppeltem Strom.