-
Bascom Zeitfunktionen
Hallo,
versuche mich gerade an der Microcontroller Programmierung in Basic.
Habe mir einen kleinen (3x3x3) Led Würfel gebastelt und möchte den über einen ATmega8 ansteuern.
Zum Würfel: Die Masse jeder "Etage" wird von einem Ausgang (A, B, C) des Controllers über einen Transistor gegen Masse geschaltet. Die Anoden jeder Säule sind ebenfalls verbunden und werden auch von einem Ausgang eingeschaltet.
Code:
$regfile = "m8def.dat"
Config Portb = Output
Config Portc = Output
A Alias Portb.0
B Alias Portb.1
C Alias Portb.2
S1 Alias Portb.3
S2 Alias Portb.4
S3 Alias Portb.5
S4 Alias Portb.6
S5 Alias Portb.7
S6 Alias Portc.0
S7 Alias Portc.1
S8 Alias Portc.2
S9 Alias Portc.3
Do
A = 1
B = 1
C = 1
S1 = 1
S2 = 0
Waitms 500
S2 = 1
S1 = 0
Waitms 500
Loop
End
Aber irgendwie will der Controller mit der "Wait" Anweisung nicht funktionieren. Wenn ich dieses Programm flashe, passiert nichts.
Habe ich einen Fehler im Programm? Wenn ja welchen?
Gruß
-
Hey,
für zeitkritische Anwendungen musst du Bascom den Controllertakt mitteilen, damit Bascom damit die richtige Größe der Schleifen und Timereinstellungen berechnen kann.
Dies gilt auch für die "wait" Anweisung.
Änder mal deinen Programmkopf so ab (aber setzte für den "$crystal" Wert deinen benutzten Takt ein und ohne die ""!) und probier es erneut:
Code:
$regfile = "m8def.dat"
$crystal = "Dein verwendeter Takt"
-
Auf der Platine habe ich eine 16MHz Quarz, geb ich dann die 16000000 einfach an?
Oder muss ich da erst noch die Fusebits ändern? Hatte da mal vor ewigen Zeiten was gelesen, aber keine Ahnung von.
-
Hey,
du musst in den Fuses noch einstellen das du einen externen Takt verwendest.
Du kannst auch einfach erstmal in den Fuses nachschauen wie die stehen (die müssten Default mässig auf 1MHz interner RC-Oszi stehen) und dann schreibst du erstmal
$crystal = 1 000 000
Dann brauchst du nichts zu ändern und falls es funktioniert weißt du das es dieser Fehler war :)
-
Du musst beides einstellen...die Fusebits damit der ATMEGA wirklich den externen Quarz verwendet.
Und die $crystal anweisung damit Bascom weiss welchen Takt du verwendest und dein Programm passend dazu erstellt.
-
Hallo,
Danke für eure Antworten.
Habe es mit $crystal = 1 000 000 im Code versucht, das brachte aber keinen Erfolg. Es leuchtet garnichts.
Habe dann mal nachgemessen, die beiden Ausgänge auf die Säulen (also S1 und S2) schaltet er, allerdings permanent. Die Transistoren steuert er allerdings nicht an.
Gruß
-
JTAG Interface noch aktiviert?
Das musst du auch über die Fuses deaktivieren.
-
JTAG Interface?
Mit den Fuses hab ich mich noch nie beschäftigt, hab da absolut keine Ahnung von.
-
Mach mal bitte einen Screenshot von deinem Fenster mit den Fuses und poste ihn hier :)
-
Das ist vielleicht eine dumme Frage, aber wie lese ich die Fusebits aus?