Ich bin Neuling und lerne derzeit Bascom, möchte später aber C lernen. Nun habe ich mein erstes Programm in Bascom geschrieben, welches bei einem ATtiny 2313 (von Pollin) einfach nur den Port D0 aller 500ms an- bzw. ausschalten soll, an welchem eine LED hängt. Also ein ganz einfacher Blinker. Nach dem ich das Programm aufgespielt habe(mit PonyProg, nem ATMEL Evolution-Board V2.0.1 und USB-Seriell-Wandler), habe ich ihn auf ein Steckbrettchen gesteckt und per Netzgerät mit 5V versorgt. Die LED blinkt nun auch, allerdings zeitlich nicht richtig: sie ist ca. 5s an und dann ca. ne halbe aus. Dann geht sie wieder an. Hier ist der Quelltext: $crystal = 20000000 $regfile = "ATtiny2313.dat" $hwstack = 12 $swstack = 8 $framesize = 8 Config Portd = Output Do Portd.0 = 1 Waitms 500 Portd.0 = 0 Waitms 500 Loop End An den anderen Ports ist nichts zu messen. Ich habe auch schon versucht den Port zu ändern und dann wurde auch dieser bedient, nur eben zeitlich nicht richtig. Ich hoffe ich habe alle nötigen Informationen gegeben und danke schon mal in Voraus.
:
Verschoben durch User
Hast die Fuse Bits auf externe Quarz gestellt ? Ansonsten läuft mit seiner internen Osc.
Er läuft mit dem internem Quarz. Und der hat laut Pollin 20MHz.
1. Hat der keinen internen Quarz 2. Läuft ein AVR im Auslieferungszustand mit 1 MHz, 8 MHz interner Oszillator und CKDIV8 Fuse.
Danke an euch alle, ich werde nun einen externen Quarz anstecken.
Du hast da wirklich einen 20 MHZ Quarz dran und die Fusebits auf externen Quarz umgestellt? Sieht nicht danach aus, dein Programm verhält sich nicht entsprechend deiner Quarz-Vorgabe. 20 MHZ, sind das nicht zuviel für den Prozessor? Ändere mal die Angabe auf 1000000 ab, falls der Tiny mit den internen 1 MHZ laufen sollte, passt wenigstens dein Programm. Wenn es neu übersetzt und eingespielt ist, auf internen Takt steht.
Edgar Brucke schrieb: > Danke an euch alle, ich werde nun einen externen Quarz anstecken. Wieso? Lass ihn erstmal mit dem RC Oszillator laufen. Du sperrst dich mit den Fuses eh nur aus.
Ich benutze jetzt erstmal ein ATMega8, der scheint mir anfängerfreundlicher zu seien. Ponyprog schreibt gerade... (oh man sind die USB-Seriell Wandler lahm...) Das mit den Fuses ist mir noch zu hoch, ich werde mich mal ein bisschen belesen müssen. Kennt jemand einen guten Link wo beschrieben wird was diese Befehle tun und was da hin muss? $hwstack $swstack $framesize
Nur mal kurz am Rande, dir ist klar, dass man mit dieser Zeile "$crystal = 20000000" Die Taktfrequenz NICHT einstellen kann?
Ach ja, stimmt ja. Die gerät bei mir immer wieder in Vergessenheit. :)
>Nur mal kurz am Rande, dir ist klar, dass man mit dieser Zeile >"$crystal = 20000000" Die Taktfrequenz NICHT einstellen kann? Ja, soweit ich das verstanden habe ist das eine Info an das Programm wie viele Takte eine ms ist.
Edgar Brucke schrieb: > Ja, soweit ich das verstanden habe ist das eine Info an das Programm wie > viele Takte eine ms ist. Halb richtig, es ist einfach die Takfrequenz deiner Taktquelle. Also Takte pro Sekunde. Bascom braucht das, damit so sachen wie "waitms" auch die richtige länge haben.
Ja so meinte ich das auch ^^. Es läuft jetzt übrigens jetzt (gut, alles ist 8x langsamer als es sein sollte aber das liegt an der falschen $crystal Einstellung, da ich dachte der läuft schon mit 8MHz...) Wie ändere ich denn jetzt eigentlich die Taktfrequenz, bzw. wie befehle ich dem µC einen externen Quarz zu benutzen?
Da musst du die Fuses setzen. Stell $crystal doch einfach richtig ein, im Auslieferungszustand 1000000 Hz.
>Da musst du die Fuses setzen.
Gut, das Problem ist nur, dass ich keine Ahnung habe wie ich das machen
soll.
Sorry das ich so ein nerviger Anfängernoob bin. :/
http://www.mikrocontroller.net/articles/Pony-Prog_Tutorial#Fuses Da wird dir geholfen. Google benutzen hilft übrigens ;)
Edgar Brucke schrieb: > Kennt jemand einen guten Link wo beschrieben wird was diese Befehle tun > und was da hin muss? > > $hwstack > $swstack > $framesize http://www.halvar.at/elektronik/kleiner_bascom_avr_kurs/speicher_hwstack_swstack_frame/
Hätte ich als nächstes auch gemacht ^^ Aber eine fachkundige Person ist immer besser :) Es funktionier jetzt übrigens einwandfrei. es blinkt wie ich es mir vorstelle. Jetzt kann ich mich an was größeres also aus deiner Sicht etwas, was man in 2 Minuten macht. :D PS: Hast du eigentlich ne eigene Seite?
Ich kann kein Bascom, aber wenn die LED jetzt blinkt ist doch erstmal alles gut. Nächster Schritt: Signale einlesen. Bis jetzt gibts du ja nur was aus. Aber ein "normales" Programm lässt sich ja gut in 3 grobe Schritt gliedern: Eingabe, Verarbeitung, Ausgabe.
Wie Eumel sagt . schalte mal das "geblinke" mit einem Taster ein und mit einem anderen aus...danach kannst probieren mit einem Ein und Ausschalten. Schaue mal "If then" an
Den If befehl kenne ich schon von NetLogo. Aus der Anleitung für das Entprellen von Tastern werde ich allerdings nicht ganz schlau...
Edgar Brucke schrieb: > Den If befehl kenne ich schon von NetLogo. Aus der Anleitung für das > Entprellen von Tastern werde ich allerdings nicht ganz schlau... Mach erstmal was wo das entprellen nicht notwendig ist. Also: Schalter gedrückt -> LED an Schalter nicht gedrückt -> LED aus Das geht natürlich auch ohne Controller, aber du sollst ja erstmal lernen wie man Eingänge einliest :)
Das mit dem Prellen ist z.b. wichtig wenn du mit einem Taster einen Wert hochzählen willst. Also einmal drücken und der Wert wir erhöht. Der Taster prellt allerdings bei drücken und wieder loslassen. Also kann es sein, dass du nur einmal drückst aber der Wert um 7 (oder irgendeine andere Zahl) erhöht wird. Das will natürlich keiner :)
Ähhhhm, wie frage ich ab ob eine Spannung anliegt? Mit "If PortB.0 = 1" ?
Bei der direkten Syntax kann ich dir nicht helfen. Erstmal musst die den entsprechenden Pin als eingang konfigurieren, dann kannst du das PIN Register auslesen.
Du kannst Deinen Taster und LED als Alias deklarieren so ist kürzer 'TASTER1 an PB0 Taster Alias Pinb.0 Config Taster = Input Portb.0=1 / Pullup Einschalten 'LED an PD0 Led Alias pind.0 Config Led = Output Danach kannst so nehmen If Taster=1 then led=1 wait 500ms End if Oder probiere If Taster=1 then toggle LED wait 500ms End if
Edgar Brucke schrieb: > Ach ja, das ging per "case" oder? Case in diesem Fall bisschen Käse.. Besser wäre ein sog. Debounce Befehl.
Das ist ja mal schön übersichtlich, im Gegensatz was man so im Inet findet! Ich hab da noch ne Frage: Was ist der Unterschied zwischen PortB.0 und PinB.0? Und wie und warum muss ich den Pullup einschalten?
Edgar Brucke schrieb: > Das ist ja mal schön übersichtlich, im Gegensatz was man so im Inet > findet! > Ich hab da noch ne Frage: Was ist der Unterschied zwischen PortB.0 und > PinB.0? Spätestens jetzt solltest du dich auch als BASCOM Programmierer ein bischen mit den Grundlagen deines µC beschäftigen, welche zb im AVR-Tutorial zu finden sind. Konkret kannst du hier AVR-Tutorial: IO-Grundlagen zu Lesen anfangen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.