So habe jetzt wieder die Möglichkeit das Teil über Bascom anzusprechen.
Habe über Ponyprog die Werte eingetragen die als Standart sein sollten.
Nun mein letztes Problem: Unser Prüfer hat das Programm auf der Homepage
für einen Atmega 8 hochgeladen dadurch ist ja erst das ganze passiert.
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