D
Dominik Schmidt
Guest
Moin !
Wir arbeiten gerade an einem kleinen Projekt. Und zwar ein Datenlogger für
den Modellbau. Das ganze funzt auch soweit schon ganz gut.
(http://www.ganzfix.de/MiniLogger/) Mein Part ist dabei die Software welche
in Delphi geschrieben ist (http://www.pibros.de/LogView/). Auch die funzt
mitlerweile ganz sauber.
Nun kam die Idee auf, aus dieser Software den AVR zu Programmieren. Dazu
steht entweder die PORT.DLL oder die RSAPI.DLL bereit, welche auch sauber
laufen (wir haben damit I2C über COM1 realisiert).
Nur an dem ISP beisse ich mir im Moment die Zähne aus. Genaugenommen geht es
um eine Funktion, die Daten zum AVR sendet und gleichzeitig empfängt. Davon
könnte man alles weitere ableiten. Ich habe am Ende mal meine aktuelle
Funktion angehängt.
Die Frage wäre nun, wer hat sich schonmal an dieses Thema rangewagt und
könnte mir evtl. mit einer Funktion oder ein paar Tips helfen
(Programmiersprache ist dabei fast egal).
Und um es vorwegzunehmen... PonyProg ist bekannt und sorry wenn das Thema
nicht 100% in diese Group passt, aber die Jungs ...delphi.misc können da
sicher nicht so viel weiterhelfen
Grüße Dominik
Ok, hier mein Quellcode. Die Schaltung dazu findet man übrigens hier (weit
unten):
http://www.rclineforum.de/forum/thread.php?threadid=61463&sid=&threadview=0&hilight=&hilightuser=&page=11
// #### Leitungen: MOSI (Data In) = 9 RI (Einlesen) #####
// #### 4 DTR (Ausgeben) #####
// #### MISO (Data Out) = 8 CTS (Einlesen) #####
// #### SCK (Serial Clock) = 6 DSR (Einlesen) #####
// #### 7 RTS(0|1) (Ausgeben) #####
// #### Reset = 3 TXD(0|1) #####
//Byte auf den Bus ausgeben und Byte lesen
//When WRITING serial data to the ATtiny26, data is clocked on the RISING
EDGE of SCK.
//When READING data from the ATtiny26, data is clocked on the FALLING EDGE
of SCK.
Function ISPInOut(Wert:integer): Integer;
var n, bitwert, erg:integer;
begin
bitwert:= 128;
erg := 0;
RTS(0); // SCK auf 0 setzen
Delay(5);
For n:= 1 To 8 do
begin
If (Wert And bitwert) = bitwert Then
begin // Wert (2^x) kommt in der Zahl vor (MOSI Bit auf 1 [DTR(1)])
DTR(1); // MOSI Bit setzen
RTS(1); // Takt auf 1 setzen
delay(1);
end
Else
begin // Wert kommt nicht in der Zahl vor (MOSI Bit auf 0 [DTR(0)])
DTR(0); // MOSI Bit löschen
RTS(1); // Takt auf 1 setzen
delay(1);
End;
RTS(0);
If CTS = 1 Then erg := erg + bitwert;
//delay(1);
bitwert := bitwert div 2;
end;
ISPInOut := erg;
end;
Wir arbeiten gerade an einem kleinen Projekt. Und zwar ein Datenlogger für
den Modellbau. Das ganze funzt auch soweit schon ganz gut.
(http://www.ganzfix.de/MiniLogger/) Mein Part ist dabei die Software welche
in Delphi geschrieben ist (http://www.pibros.de/LogView/). Auch die funzt
mitlerweile ganz sauber.
Nun kam die Idee auf, aus dieser Software den AVR zu Programmieren. Dazu
steht entweder die PORT.DLL oder die RSAPI.DLL bereit, welche auch sauber
laufen (wir haben damit I2C über COM1 realisiert).
Nur an dem ISP beisse ich mir im Moment die Zähne aus. Genaugenommen geht es
um eine Funktion, die Daten zum AVR sendet und gleichzeitig empfängt. Davon
könnte man alles weitere ableiten. Ich habe am Ende mal meine aktuelle
Funktion angehängt.
Die Frage wäre nun, wer hat sich schonmal an dieses Thema rangewagt und
könnte mir evtl. mit einer Funktion oder ein paar Tips helfen
(Programmiersprache ist dabei fast egal).
Und um es vorwegzunehmen... PonyProg ist bekannt und sorry wenn das Thema
nicht 100% in diese Group passt, aber die Jungs ...delphi.misc können da
sicher nicht so viel weiterhelfen
Grüße Dominik
Ok, hier mein Quellcode. Die Schaltung dazu findet man übrigens hier (weit
unten):
http://www.rclineforum.de/forum/thread.php?threadid=61463&sid=&threadview=0&hilight=&hilightuser=&page=11
// #### Leitungen: MOSI (Data In) = 9 RI (Einlesen) #####
// #### 4 DTR (Ausgeben) #####
// #### MISO (Data Out) = 8 CTS (Einlesen) #####
// #### SCK (Serial Clock) = 6 DSR (Einlesen) #####
// #### 7 RTS(0|1) (Ausgeben) #####
// #### Reset = 3 TXD(0|1) #####
//Byte auf den Bus ausgeben und Byte lesen
//When WRITING serial data to the ATtiny26, data is clocked on the RISING
EDGE of SCK.
//When READING data from the ATtiny26, data is clocked on the FALLING EDGE
of SCK.
Function ISPInOut(Wert:integer): Integer;
var n, bitwert, erg:integer;
begin
bitwert:= 128;
erg := 0;
RTS(0); // SCK auf 0 setzen
Delay(5);
For n:= 1 To 8 do
begin
If (Wert And bitwert) = bitwert Then
begin // Wert (2^x) kommt in der Zahl vor (MOSI Bit auf 1 [DTR(1)])
DTR(1); // MOSI Bit setzen
RTS(1); // Takt auf 1 setzen
delay(1);
end
Else
begin // Wert kommt nicht in der Zahl vor (MOSI Bit auf 0 [DTR(0)])
DTR(0); // MOSI Bit löschen
RTS(1); // Takt auf 1 setzen
delay(1);
End;
RTS(0);
If CTS = 1 Then erg := erg + bitwert;
//delay(1);
bitwert := bitwert div 2;
end;
ISPInOut := erg;
end;