Also ich will GPS Daten von einem GPS Modul holen.

Hierzu verwende ich als erstens den Atmega16.


Hierzu folgen 8 Taktzyklen.
Nach jedem Taktzyklus wird der Wert vom Eingangspin eingelesen.
Wenn dort eine Spannung anliegt, wird ein dementsprechender Wert in die Variable 1 addiert.

Nach 8 Taktzyklen wird die Variable 2 mit dem Wert 1 addiert.
Hat dieVariable 2 dann den Wert 600 erreicht, dann weiss ich, dass ich 4800 Bit vom GPS Empfänger geholt habe.
Zudem wird noch die Variable 3 mit dem Wert 1 addiert.
Die Variable 3 gibt an, wie weit die SD-Karte schon geladen wurde.

Da die Variable 2 nun den Wert 600 hat, wird 1 Stop Bit zum GPS Modul gesendet.

Anschliessend wird die Variable 2 wieder auf den Wert 0 gesetzt.

Hat die Variable 3 den gleichen Wert wie Variable 4, dann wurde die SD Karte voll geladen.


Hier der Programmiercode:
'/////////////////////////////////////////////////////////
'/// FastAVR Basic Compiler for AVR by MICRODESIGN ///
'/// Name of Your project
'/////////////////////////////////////////////////////////
$regfile = "m16def.dat"
$crystal = 4000000
$Baud = 4800
$Include "Register.txt"
$Include "Subs.txt"
DDRD = &B00000000 'Port D als Eingang

Ausgang = 1
Eingang = 0
Config PORTD = Output


'Schleifenanfang
Do
If Register1 < 8 Then

Ausgang01

If Register1 = 1 Then

If PIND.3 = 1 Then
Register2 = Register2 + 1
End If

End If

If Register1 = 2 Then

If PIND.3 = 1 Then
Register2 = Register2 + 2
End If

End If

If Register1 = 3 Then

If PIND.3 = 1 Then
Register2 = Register2 + 4
End If

End If

If Register1 = 4 Then

If PIND.3 = 1 Then
Register2 = Register2 + 8
End If

End If

If Register1 = 5 Then

If PIND.3 = 1 Then
Register2 = Register2 + 16
End If

End If

If Register1 = 6 Then

If PIND.3 = 1 Then
Register2 = Register2 + 32
End If

End If

If Register1 = 7 Then

If PIND.3 = 1 Then
Register2 = Register2 + 64
End If

End If

If Register1 = 8 Then

If PIND.3 = 1 Then
Register2 = Register2 + 128
End If

End If

Register1 = Register1 + 1

End If

'Wird ausgeführt, wenn 1 Byte vom GPS-Emfänger empfangen wurde
If Register1 = 8 Then

'Hier wird das Register3 um 1 erhöht. Dies ist notwendig, damit man weiss, wieviele Bytes noch vom GPS-Empfänger empfangen
'werden müssen, bevor ein Stop Bit folgt.
Register3 = Register3 + 1

'Hier wird das Register4 um 1 erhöht.
'Dies ist notwendig, damit man weiss, wieviel Bytes die SDKarte noch empfangen kann.
Register4 = Register4 + 1
'Hier wird das Register1 auf den Wert 1 zurück gesetzt.
'Dies ist notwendig, damit wieder 1 Byte vom GPS Empfänger empfangen werden kann.
Register1 = 1
End If

'Wenn 600 Byte vom GPS Empfänger empfangen wurden, wird 1 Stop Bit gesendet.
If Register3 = Register6 Then
Ausgang01

'Nun wird die Variable Register 3 solange addiert, bis wieder 600 Byte empfangen wurden
Register3 = 0
End If

'Wenn die SD Karte voll ist, können keine GPS Daten mehr in die SD-Karte geladen werden.
'Nun geht eine rote LED an.

If Register4 = Register5 Then



End If

Loop 'Schleifenende


Register.txt:
'Dieses Register dient um die Taktzyklen zum GPS-Empfänger festzulegen
'Insgesamt sind es 8 Taktzyklen
Dim Register1 As Byte
'In dieses Register wird der Binärwert vom GPS-Empfänger gespeichert
Dim Register2 As Byte
'Register für die Baudrate des GPS-Empfängers
'Die Baudrate beträgt 4800
Dim Register3 As LONG
'Dieses Register gibt an, wieviele Bytes schon in die SD Karte geschrieben wurden.
Dim Register4 As LONG
'Dieses Register gibt die Speicherkapazität der SD-Karte an
Dim Register5 As Long

Dim Register6 As Long

Dim Ausgang AS Byte
Dim Eingang AS byte

Register1 = 1
Register2 = 0
Register3 = 0
Register4 = 0
Register5 = 220
Register6 = 600



Subs.txt:
Declare Sub Ausgang01
Declare Sub Ausgang02
Declare Sub Ausgang03
Declare Sub Ausgang04
Declare Sub Ausgang05
Declare Sub Ausgang06
Declare Sub Ausgang07
Declare Sub Ausgang08
Declare Sub Ausgang09
Declare Sub Ausgang10
Declare Sub Ausgang11
Declare Sub Ausgang12
Declare Sub Ausgang13
Declare Sub Ausgang14
Declare Sub Ausgang15
Declare Sub Ausgang16
Declare Sub Ausgang17
Declare Sub Ausgang18
Declare Sub Ausgang19
Declare Sub Ausgang20
Declare Sub Ausgang21
Declare Sub Ausgang22
Declare Sub Ausgang23
Declare Sub Ausgang24
Declare Sub Ausgang25
Declare Sub Ausgang26
Declare Sub Ausgang27
Declare Sub Ausgang28
Declare Sub Ausgang29
Declare Sub Ausgang30
Declare Sub Ausgang31
Declare Sub Ausgang32
Declare Sub Ausgang33
Declare Sub Ausgang34
Declare Sub Ausgang35
Declare Sub Ausgang36
Declare Sub Ausgang37
Declare Sub Ausgang38
Declare Sub Ausgang39
Declare Sub Ausgang40

Sub Ausgang01
For Register6 = 1 To 1
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 1 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang02
For Register6 = 1 To 2
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 2 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang03
For Register6 = 1 To 3
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 3 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang04
For Register6 = 1 To 4
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 4 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang05
For Register6 = 1 To 5
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 5 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang06
For Register6 = 1 To 6
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 6 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang07
For Register6 = 1 To 7
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 7 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang08
For Register6 = 1 To 8
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 8 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang09
For Register6 = 1 To 9
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 9 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang10
For Register6 = 1 To 10
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 10 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang11
For Register6 = 1 To 11
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 11 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang12
For Register6 = 1 To 12
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 12 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang13
For Register6 = 1 To 13
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 13 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang14
For Register6 = 1 To 14
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 14 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang15
For Register6 = 1 To 15
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 15 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang16
For Register6 = 1 To 16
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 16 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang17
For Register6 = 1 To 17
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 17 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang18
For Register6 = 1 To 18
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 18 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang19
For Register6 = 1 To 19
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 19 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang20
For Register6 = 1 To 20
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 20 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang21
For Register6 = 1 To 21
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 21 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang22
For Register6 = 1 To 22
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 22 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang23
For Register6 = 1 To 23
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 23 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang24
For Register6 = 1 To 24
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 24 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang25
For Register6 = 1 To 25
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 25 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang26
For Register6 = 1 To 26
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 26 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang27
For Register6 = 1 To 27
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 27 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang28
For Register6 = 1 To 28
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 28 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang29
For Register6 = 1 To 29
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 29 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang30
For Register6 = 1 To 30
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 30 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang31
For Register6 = 1 To 31
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 31 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang32
For Register6 = 1 To 32
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 32 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang33
For Register6 = 1 To 33
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 33 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang34
For Register6 = 1 To 34
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 34 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang35
For Register6 = 1 To 35
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 35 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang36
For Register6 = 1 To 36
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 36 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang37
For Register6 = 1 To 37
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 37 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang38
For Register6 = 1 To 38
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 38 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang39
For Register6 = 1 To 39
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 39 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub

Sub Ausgang40
For Register6 = 1 To 40
if Register6 = 1 then
Portd.0 = Ausgang
end if
Portd.1 = Ausgang
Portd.1 = Eingang
Portd.0 = Eingang
If Register6 = 40 Then
Portd.2 = Ausgang
Portd.2 = Eingang
End If
Next
End Sub




Programmiert wurde es mit Bascom.


Ich hoffe ihr könnt mir schnellstens helfen.
Also nachdem compilen kommen wiegesagt keine Fehler.

Wie man auch sieht, werden 5 Schieberegister verwendet.
Jedes dieser Register hat 8 Bit.
Demnach hätte ich 40 Bit und demzufolge 40 Ausgangspins.

Um den Binärcode in die Schieberegister zu takten, verwende ich 3 Pins vom Atmega8.

Portd.0 = Datasignal
Portd.1 = Clocksignal
Portd.2 = Strobesignal

zum einlesen, verwende ich Pind.3


CU