Wie muss ich das Programm umschreiben das es auf dem ATmega 16 läuft???? Hier das Programm: '----------------------------------------------------------------------- -------- 'Projekt: USB_KIT 'Funktionsüberprüfung 11.11.2004 'Hardware: 'Aufgabe: Software zur Erstinbetriebnahme des AVR-Kits ' dabei werden viele Funktionen getestet und dargestellt. ' Erklärung der Anwendung in grünem Text. 'db100205,100505,250505,011105,230306,230606,050806 '----------------------------------------------------------------------- -------- '----------------------------------------------------------------------- -------- $regfile = "m8def.dat" 'zu jedem Modell passende Datei $crystal = 8000000 'Quarz (Resonator) Frequenz $PROG &HFF,&HAE,&HD9,&H00 'FuseBit auf Extern. Quarz $baud = 9600 'gewünschte Bautrate vorgeben 'Beispiel wie man den internen EEProm laden kann $eeprom Data "123456789012345" '1,15 Data "StarterKit V4.1" '16,31 Data "Timmy Fiola " '32,47 Data "FV EL&IT Mainz " '48,63 Data "Stand: 23032006" '64,79 Data "Handwerkskammer" '80,95 Data "MultimediaGrimm" '96,111 'DatenDirektionRegister Port B DdrB = 255 'alle PortB als Ausgang deklarieren PortB = 255 'alle PullUp ein. DdrC = &B111_1111 'das Gleiche mit Port C(nur 6-Byte) PortC = &B111_1111 'nur andere Schreibweise DdrD = &B0011_1000 'D4+5 für LCD-LED Beleuchtung Outp. PortD = &B1101_1111 'PD4=H/PD5=L Dim I As Integer 'Variable für intern. Zähler vom Timer Dim D As Integer 'eine Integer- Variable (D) wird 'dimensioniert.Der Inhalt kann nun 'während der Laufzeit verändert werden Dim Txt As String * 16 'erstellen einer String-Variablen Dim W As Word 'Word Variablen benötigen wenig Speicher Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = PortB.1 , Db5 = PortB.2 , _ Db6 = PortB.3 , Db7 = PortB.4 , E = PortB.0 , Rs = PortD.6 Initlcd Cls Cursor Off Declare Function Eepromlesen(byval A As Word , Byval E As Word) As String Txt = EepromLesen(79 , 94) : Lcd Txt Lowerline Txt = EepromLesen(16 , 31) : Lcd Txt Config Timer1 = Timer , Prescale = 64 '256 ist schneller On Timer1 SprungTim1 'Sprungadresse Enable Interrupts S1 Alias PinD.3 'hier bekommen die Ports einen selbst S2 Alias PinD.4 '-vormals D.6- S3 Alias PinD.7 'die Sufix aus der Zeichnung, dann S4 Alias PinD.2 'hat man eine gute Wiedererkennung. V7 Alias PortC.2 V6 Alias PortC.1 V5 Alias PortC.0 V4 Alias PortB.5 Irs Alias PortC.1 'Ire Alias PortD.5 'IR-Empfängerdiode '-------------------nur Startbedingung testen und ausgeben------------------- Waitms 250 '1/4 Sekunde warten Print Chr(13) 'Zeilenumbruch 2x Txt = EepromLesen(16 , 31) : Print Txt 'Text vom EEProm und ausgeben Txt = EepromLesen(32 , 47) : Print Txt 'Text vom EEProm und ausgeben Txt = EepromLesen(80 , 95) : Print Txt 'Text vom EEProm und ausgeben Txt = EepromLesen(64 , 79) : Print Txt 'Text vom EEProm und ausgeben Print "Registertest" Print "B-Port: " ; Ddrb ; " / " ; Portb 'Registerinhalt darstellen Print "C-Port: " ; Ddrc ; " / " ; Portc Print "D-Port: " ; Ddrd ; " / " ; Portd Print 'einfacher Zeilenumbruch Waitms 500 Enable Timer1 'Timer einschalten V6 = 0 V5 = 0 V4 = 0 '----------------------------Hauptroutine------------------------------- ----- Do 'Tasterabfrage mit Entprellung durch "Debounce" Debounce S1 , 0 , Tast1 , Sub 'S1 Debounce S2 , 0 , Tast2 , Sub 'S2 Debounce S3 , 0 , Tast3 , Sub 'S3 Debounce S4 , 0 , Tast4 , Sub 'S4 if S2 = 0 and S3 = 0 then Gosub TimEinAus 'Hier werden Programmroutinen eingefügt.Diese Scheife wird ständig wiederholt Loop '---------------------Ende der Hauptroutine---------------------------------- 'Alles an Programmiercode, was hiernach folgt, sind Nebenroutinen in die der 'Mikrocontroller entweder von sich aus (Interrupt,Timer u.s.w) springt, oder 'durch ein Ereignis (Debounce,Sub- oder Funktion u.s.w) ausgelöst wird. Nach 'der Abarbeitung der Unterroutinen springt der Mikrocontroller immer wieder 'an die Stelle zurück, von der aus er ausgetreten ist. '---------------------Timer1 Ein/Aus----------------------------------------- TimEinAus: If TIMSK.TOIE1 = 0 then 'ENABLE Timer1 TIMSK.TOIE1 = 1 Else TIMSK.TOIE1 = 0 End If waitms 1000 Return 'Hier ist die Timerroutine. Hier wird alle Sekunde hin verzweigt SprungTim1: V7 = Not V7 'das ist ein genialer Befehl, Der den Zustand des Ports einfach 'umdreht. Also ist er eben Low, dann wird er High. Die LED V7 'wird also blinken. Vorausgesetzt der Port steht auf Ausgang 'und der PullUp- Widerstand ist eingeschaltet. Und der Timer 'ist enabled (eingeschaltet) Incr I 'Incrementiere I (Zähle um 1 höher entspricht: I=I+1) Print "033150:Timer";I 'das ist die Syntax um über UART seriell Daten zu 'senden. das Semikolion trennt dabei die Variable (i) 'vom geschriebenen Text. Print sendet dann den Inhalt 'von (I) Ire = V7 'zum Testen der IR-Empfängerdiode Return '--------------------Tastenroutine-------------------------------------- ------ Tast1: Incr D 'zählt die internen Tastendrücke Txt = EepromLesen(64 , 79) 'holt Text vom EEProm (stand) Lowerline : Lcd Txt Print "S1: " ; Txt ; " z:" ; D 'Ausgabe über UART (TXD) V6 = Not V6 'LED-Zustand umschalten Return '----------------------------------------------------------------------- ------ Tast2: Txt = EepromLesen(32 , 47) 'holt Text vom EEProm (USB onB..) Print "S2: " ; Txt 'UART (TXD) Ausgabe Lowerline : Lcd Txt V4 = Not V4 'LED V4 ändert seinen Zustand Return '----------------------------------------------------------------------- ------ Tast3: Txt = EepromLesen(48 , 63) 'holt Text vom EEProm (FV-EL..) Print "S3: " ; Txt 'UART (TXD) Ausgabe Lowerline : Lcd Txt V7 = Not V7 'LED V7 ändert seinen Inhalt Return '----------------------------------------------------------------------- ------ Tast4: Txt = EepromLesen(16 , 31) 'holt Text vom EEProm (USB-Kit..) Lowerline : Lcd Txt Print "S4: " ; Txt 'UART (TXD) Ausgabe V5 = Not V5 Return '----------------------------------------------------------------------- ------ 'Hier folgen Unterroutinen 'Aufgabe : Das implementierte EEProm auslesen (512 Byte Größe möglich), 'Parameter : A (Anfangspunkt) eine Zahl zwischen 1-511 - immer < E ' E (Endpunkt) eine Zahl zwischen 2-512 'Ausgabe : EEPromLesen (Stringvariable) Function EepromLesen(byval A As Word , Byval E As Word) As String Local Epunkt As Word 'Lokale Variablen werden nach Ver- Local Inhalt As Byte 'lassen der Routine wieder frei 'gegeben Eepromlesen = "" 'Der Inhalt bleibt bestehen, deshalb For Epunkt = A To E 'erstmal löschen, dann for - next Readeeprom Inhalt , Epunkt 'um EEProm schrittweise (seriell) Eepromlesen = Eepromlesen + Chr(inhalt) 'aus zu lesen. Next Epunkt End Function
Hi Wie groß ist den dein Verständnis für das Programm? MfG Spess
Wie soll ich diese Frage verstehen??? kann man das nicht einfach umschreiben für nen Atmega 16???
Ingo wrote: > Wie soll ich diese Frage verstehen??? > die Frage war ziemlich eindeutig: Verstehst du, was das Programm macht und wie es funktioniert? > kann man das nicht einfach umschreiben für nen Atmega 16??? > wenn du obige Frage mit ja beanworten kannst, sollte es ein Leichtes sein, auch diese Frage zu beantworten und letztendlich das Programm umschreiben können... Uwe
Hi Warum sol ich jemand einen Tip geben, wie sein Auto 100 Km/h schneller wird, wenn ich nicht weiss, ob er überhaupt fahren kann? MfG Spess
$regfile = "m8def.dat" auf $regfile = "m16def.dat" ändern, das wars
Okay Also das Programm zeigt kurz beim einschalten des boards Data "StarterKit V4.1" '16,31 Data "Stand: 23032006" '64,79 im Display an. Danach zeigt es nur noch den Namen an und Handwerkskammer und in der Ecke erscheint ein Zähler der von 1 anfängt hoch zu zählen. Wenn ich die R Taste drücke wird das Komplette Board neugestartet also wird wieder der obige Text ausgegeben und danach fängt der Zähler wieder bei 1 an zu zählen. Drücke ich eine der Anderen Tasten sehe Multimedieagrim. Das ist das was ich weiß über das Programm. An sonsten ist das nur eine Testsoftware die während der Prüfung aufgespielt wurde um die Funktion des Boards zu bestätigen. Da ich aber noch kein Eigenes Programm geschrieben habe wäre ich happy wenn das Board nicht einfach nichts tut wenn ich es einschalte sondern dieses Programm wiedergibt. Hoffe konnte damit helfen??!! Viele Grüße Ingo
$regfile = "m8def.dat" auf $regfile = "m16def.dat" ändern, das wars hab ich schon versucht passiert nichts kann es sein das ich die fuses erst ändern muss das das Programm läuft?? wenn ja wie ändere ich sie ab hab die Angabe das sie 1110:1110 sein sollen. Das soll auch über die Bascom Software gehen aber ich kann diesen Zahlenwer nigendwo einstellen oder doch???
also wenn du schon eine Anzeige hast, hast du es ja schon fast geschafft: mit LCD xxx (im Bascom gibts eine Helpfunktion) kann man sich alles mögliche anzeigen lassen (Variablen, Texte usw.)
Meine Anzeige sieht zur Zeit so aus das mein 1*16 Zeilendisplay die erste Zeile nur Rechtecke angezeigt werden in der 2. Zeile ist nichts. Das selbe macht er auch wenn der Atmega leer ist.... Oder habe ich dich jetzt falsch verstanden??
Außerdem sagt mir Bacom immer wieder wenn ich das Flashen beginnen will das die software und der Ausgewählte chip nicht übereinstimmen woran kann das noch liegen??
Grob gesagt gibt es 4 Baustellen, wo man den Typ angeben muß: 1. Dem Compiler, damit er weiß, was fürn Code er generieren muß 2. Dir selbst, damit Du die vordefinierten Namen verwenden kannst, also: $regfile = "m8def.dat" 3. Dem Programmer, damit er weiß, welchen Programmieralgorithmus er einstellen muß. 4. Der Code, wenn Sachen verwendet werden, die unterschiedlich sind (Timer usw.). Ist aber bei Mega8 -> Mega16 kaum zu erwarten, die sind sich sehr ähnlich. Peter
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.