Programmer für ATTiny2313

Alles rund um Computertechnik, LEDs, und und und....
Benutzeravatar
Michael Schmidt
Forumane
Beiträge: 331
Registriert: Montag 23. Februar 2004, 14:39
Wohnort: Groß Twülpstedt

Quellcode für ein Feuerwehrauto in Basic für ATTiny2313

Beitrag von Michael Schmidt » Freitag 4. Januar 2008, 08:50

Halli Hallo,

David hat recht, mir ist glatt ein Fehler beim Zeichnen unterlaufen und ich bin in die falsche PIN Reihe geruscht. :oops:
Sorry, habe das auch beim erneuten drüber schauen übersehen.
Habe den Plan schon geändert, kann ihn nur nicht Hochladen, da bei meinen Homepage Provider was schief läuft. So wie das geht, werde ich den neuen Plan Hochladen.

Quellcode für ein Feuerwehrauto:

$regfile = "attiny2313.dat"
$prog &HFF , &H64 , &HDF , &H00
$PROG &HFF,&H64,&HDF,&H00
$PROG &HFF,&H64,&HDF,&H00
Dim A As Byte 'Blaulicht1
Dim B As Byte 'Blaulicht2
Dim C As Byte 'Flascher
Dim D As Byte 'Martinhorn Hi
Dim E As Byte 'Martinhorn Low
Dim F As Word 'Martinhorn Wechsel
Dim G As Byte 'PWM
Dim H As Byte 'Blinker

Config Portb.0 = Output 'PWM
Config Portb.1 = Output 'Blinker
Config Portb.2 = Output 'Flascher
Config Portb.3 = Output 'Blaulicht 1
Config Portb.4 = Output 'Blaulicht 2
Config Portb.5 = Output 'Martinhorn

Config Timer0 = Timer , Prescale = 1
Config Timer1 = Timer , Prescale = 1
Enable Timer0
Enable Timer1
Enable Interrupts
On Timer0 Unters
On Timer1 Unterp

Do 'Hauptschleife
Loop 'sprung zum Hauptschleifen anfang
End

Unterp: 'Sprungpunkt von Timer1
If A = 64 Then A = 0 'Wenn Var. Blaul. 1 gleich 64, dann Var. Blaul. 1 gleich 0
Incr A 'Var. Blaul. 1 +1
If A < 32 Then Portb.3 = 0 'Blaulicht 1
If A > 31 Then Portb.3 = 1 'Blaulicht 1
If B = 62 Then B = 0 'Wenn Var. Blaul. 2 gleich 62, dann Var. Blaul. 2 gleich 0
Incr B 'Var. Blaul. 2 +1
If B < 31 Then Portb.4 = 0 'Blaulicht 2
If B > 30 Then Portb.4 = 1 'Blaulicht 2
If C = 96 Then C = 0 'Wenn Var. Flascher gleich 96, dann Var. Flascher gleich 0
Incr C 'Var. Flascher +1
If C < 6 Then Portb.2 = 1 'Flascher
If C = 6 Then Toggle Portb.2 'Flascher
If C = 12 Then Toggle Portb.2 'Flascher
If C > 18 Then Portb.2 = 0 'Flascher
If H = 48 Then H = 0 'Var. Blinker gleich 48, dann Var. Blinker gleich 0
Incr H 'Var. Blinker +1
If H = 1 Then Toggle Portb.1 'Blinker
Return 'Zurück zum Hauptprogramm
End

Unters:
If F > 35000 Then F = 0
Incr F 'Var. Martinsh. +1
If F < 17500 Then E = 7 'Var. Martinsh. We. kleiner 86, springe nach W1
If F > 17500 Then E = 8 'Var. Martinsh. We. größer 86, springe nach W2
Incr D
E = E * 2 'Var. Martinsh. Hi +1
If D > E Then D = 0 'Var. Martinsh. Hi +1
E = E / 2
If D < E Then Portb.5 = 1 'Martinhorn
If D > E Then Portb.5 = 0 'Martinhorn
If G = 128 Then G = 0 'Wenn Var. PWM gleich 128, dann Var. PWM gleich 0
Incr G 'Var. PWM +1
If G = 1 Then Toggle Portb.0 'PWM
If G = 4 Then Toggle Portb.0 'PWM
Return
End


Die Angaben hinter dem ' sind nur als Programmablaufanhaltspunkte, das brauch ihr nicht mit übernehmen.
Das Martinhorn klingt noch nicht ganz sauber, bin aber dabei...liegt wahrscheinlich daran, weil ich ein Rechtecksignal auf den Lautsprecher gebe und dann passieren sehr unschöne sache. Deswegen bin ich gerade dabei einen passenden schwingkreis dafür zu bauen. Sprich aus Rechteck Sinus machen, das problem dabei ist, das sich ein Schwingkreis unter Last verändert.

Kurze erklärung zum Programm:

Ich lege Speicherbereiche fest, die dann hochgezählt werden. Also DIM (Speicherberech erstellen) A (der Name des Speicherbereichs, könnt ihr nennen wir ihr wohlt, darf nur kein BASCOM befehl sein) AS BYTE (als Byte, also einen Speicherbereich von 0 bis 255). Dann werden die Ein und Ausgänge Konfiguriert, in diesem fall habe ich nur Ausgänge (z.B. CONFIG PORTB.0 = OUTOUT der PIN 12 am IC soll ein Ausgang sein.) Dann werden die beiden Timer, die der ATTiny2313 hat als Zähler Konfiguriert mit einem Vorteiler von 1 (z.B.Config Timer0 = Timer , Prescale = 1), sowie aktiviert (Enable Timer0) und die dazugehörigen Unterprogramme angegeben (On Timer0 Unters).
Ich habe alles in Unterprogrammen laufen, damit zu keinen verzögerungen kommt, wenn er vom Hauptprogramm ins Unterprogrammspringt. Darum ist meine Hauptschleife leer (DO LOOP END).
Im Unterprogramm lasse ich nun den jeweiligen Speicherbereich hochzählen (z.B. INCR A zähle den Speicherbereich A um einen hoch). Wenn ein bestimmter Wert erreicht ist, soll er den Ausgang schalten (z.B. If A < 32 Then Portb.3 = 0 wenn A kleiner 32 ist, dann soll der Ausgang B.3 aus sein)(If A > 31 Then Portb.3 = 1 wenn A größer 31 ist, dann soll B.3 An sein). Vorweg habe ich noch die Speicherrücksetzung (If A = 64 Then A = 0 wenn A = 64 dann setze A auf 0), das mach ich am Anfang, damit er nie höher als 64 Zählen kann.
Ganz am Anfang steht $prog &HFF , &H64 , &HDF , &H00 damit wird der interne Vorteiler auf Null gesetzt, in der Werkseinstellung ist ein Vorteiler gesetzt. Sprich die Intern erzeugten 1 MHz werden runtergetaktet und das hebe ich damit auf.
MfG

Michael Schmidt
__________________________________________

Für jede Form von Straßen.
Der Touareg

Benutzeravatar
H0Egon
Forumane
Beiträge: 978
Registriert: Montag 16. Oktober 2006, 12:55
Wohnort: BW

Beitrag von H0Egon » Freitag 4. Januar 2008, 12:03

Null Problem. Aber gut dass das jemand gemerkt hat. Du kannst entweder mir den Plan schicken und ich lad in wo hoch oder du lädst ihn z.B auf www.myimg.de

Edit: Ich benutze diesen Programmer in leicht modifizierter Form für meinen Attiny 26

MFG
David

Benutzeravatar
Michael Schmidt
Forumane
Beiträge: 331
Registriert: Montag 23. Februar 2004, 14:39
Wohnort: Groß Twülpstedt

Beitrag von Michael Schmidt » Samstag 5. Januar 2008, 11:37

Hallo David,

dank dir nochmal, habe jetzt die Bilder bei myimage hochgeladen und hier eingestellt.
Viel spaß noch beim Programmieren.

Was schön wäre, wenn es hier im Forum für µC, eine eigene Rubrik geben würde.
MfG

Michael Schmidt
__________________________________________

Für jede Form von Straßen.
Der Touareg

Benutzeravatar
Oysos
Forumane
Beiträge: 793
Registriert: Samstag 4. August 2007, 11:43
Wohnort: Kiel

Beitrag von Oysos » Samstag 5. Januar 2008, 12:07

Moin Michael,

da kann ich dir nur zustimmen!
Das Thema µC gehört in Teilen zu Car-System, zu Elektronik und zu Software. Wenn man das bündeln könnte, wäre das ziemlich gut.

Gruß
Hannes

--modder--

Re: Programmer für ATTiny2313

Beitrag von --modder-- » Samstag 30. Januar 2010, 08:16

Hi

Ich hab den Programmer nachgebaut aber irgendwie kann ich den Attiny nicht programmieren. Bei Bascom steht dann immer ''couldn't infinity chip''. An was kann das liegen?

mfg

Jan

tinkerbox

Re: Programmer für ATTiny2313

Beitrag von tinkerbox » Freitag 19. Februar 2010, 17:11

Hallo allerseits.

wollte mich nur für die schönen Informationen zum Thema bedanken....
Vor vielen Jahren habe ich 6502 und später ccontrol programiert aber dem preiswerten ATTiny konnte ich nicht widerstehen. Bascom wird für mich eine neue Erfahrung

tinkerbox

Antworten