Hallo,
anbei Assemblercode für einen Programmierer auf Basis AVRAT90S4433
(bzw. 2333). Das ganze orientiert sich stark an avr910.asm von Atmel,
allerdings ist UART und SPI über Hardware implementiert. Getestet ist es
bis jetzt nur mit 4433 --> 4433.
Gedacht ist es für den Fall, daß Programmier-AVR und Ziel-AVR auf dem
gleichen Steckbrett sitzen und gemeinsame Ressourcen teilen
(im Header steht noch mehr dazu).
Gerhard
Hi Gerhard,
nette Sache, so was ähnliches wollte ich auch schon machen. Was mich
daran nur stört ist das die AVRprog Software nur die älteren Controller
unterstützt. Ich zweifle nicht das man die Controllersoftware für die
Mega's anpassen kann, aber die Windowssoftware muß man wohl selber
schreiben :(
Gruß
Markus
http://www.elektronik-projekt.de/
Hallo Markus,
bis jetzt hab ich mich nur mit dem 4433 beschäftigt. Zu den (neuen)
Megas kann ich daher nichts sagen. Kannst Du das mal testen, daß Du
einen MEGA8 programmierst und in AVRProg irgendeinen anderen MEGA
angibst ? Wenn es so ist, daß alle MEGAs in Write Page Mode geflasht
werden, dann müßte das eigentlich gehen.
Wenn das ganze mit AVRProg.exe funktioniert, wäre es halt zumindest fürs
erste einfacher, weil das in AVRStudio bereits dabei ist.
Ansonsten ist das Byte-Protokoll über die serielle Schnittstelle
vergleichsweise einfach, der Programmieraufwand für einen Client wäre
überschaubar. Den Ansatz des Programmierens über AVR halte ich für
ausbaufähig, das STK500 funktioniert ja letztendlich auch so ...
Gerhard
AVR progger fuer Linux und Windows :
mit Java auf serielle Schnittstelle zugreifen
-------------------------------------------------
Die benoetigten Dateien befinden sich auf
http://www.gnomsoft.de/RS232-1.0.zip
Am einfachsten ist folgende Vorgehensweise, wenn die .asm
Assembler-Dateien im Verzeichnis /home/knoppix/avr stehen:
1) obige ZIP-Datei in das Verzeichnis /home/knoppix/avr kopieren und
dort entpacken
2) den Assembler gavrasm besorgen von
http://www.avr-asm-tutorial.net/gavrasm/index_de.html
An dieser Stelle moechte ich mich bei Gerhard Schmidt fuer den Assembler
bedanken, der sowohl unter Windows und Linux funktioniert.
3) die ausfuehrbare Datei gavrasm bzw. gavrasm.exe nach
/home/knoppix/avr kopieren
4) zB. buttons.asm assemblieren mit ./gavrasm buttons.asm
5) testen ob Java richtig installiert ist mit : java HalloWelt
6) AVR programmieren mit : java AVRprog buttons
7) AVR schneller programmieren mit : java AVRprog -b wasgrosses
Mit der -b Option wird blockweise uebertragen. Damit lassen sich recht
kurze Programmierzeiten erreichen. Das STK500 programmiert noch etwas
schneller, da dort mit 115200 Baud gearbeitet wird und einem Datenpuffer
von 256 Byte (AVRprog nutzt 19200 Baud und 64 Byte Puffer). Da die
Spezifikation des STK500 mittlerweile von Atmel offengelegt wordem ist,
kann AVRprog.java und progger.asm auch als Vorlage benutzt werden, ein
STK-Pendant zu entwickeln.
Die C-Bibliotheksdateien zum Zugriff auf die serielle Schnittstelle
(libRS232.so und RS232.dll) sind fertig kompiliert und werden
automatisch in das passende Verzeichnis kopiert, wenn AVRprog.class zum
ersten mal ausgefuehrt wird. Ich hatte mich entschlossen, diese
C-Bibliotheken selbst zu programmieren, da die "javax.comm.*"
Bibliotheken von SUN zu langsam sind (Faktor 10) und mir die
verfuegbaren Linux-Bibliotken zu kompliziert zu installieren waren. Auch
hatte mich JNI interessiert, mit denen die Moeglichkeiten von Java mit
C-Bibliotheken beliebig erweitert werden koennen. Dokumentation dazu
steht auf http://java.sun.com/docs/books/jni/
Um mit Linux die seriellen Schnittstellen zu nutzen muss man entweder
root-Rechte haben oder in der Benutzergruppe uucp sein oder sonstwie
Zugriffsrechte auf /dev/ttyS? und
/var/lock haben.
Terminalprogramme:
------------------
Wer die C-Bibliotheken benutzen will, um mit eigenen Java-Programmen auf
die serielle Schnittstelle zuzugreifen, der kann das unter Linux mit
"minicom" machen und unter Windows mit "Hyperterminal". Beide sind
jeweils auf Baudrate, Schnittstelle etc. zu konfigurieren.
minicom ist normalerweise bei Linux bereits installiert, hat eine eigene
man page und wird am besten gestartet mit Angabe einer vorher
gespeicherten Konfigurationsdatei:
minicom meine.dfl
Hyperterminal ist zu erreichen ueber Menueoptionen
Start->Zubehoehr->Hyperterminal->Hyperterminal
Auch hier kann die Konfiguration gesichert werden und dann laesst sich
Hyperterminal auch von der Konsole aus starten mit
start Hypertrm meine.ht
Zum Selber-Kompilieren :
------------------------
Unter Linux wird die Client-Software fuer den progger folgendermassen
kompiliert, wobei der Pfad zu Java entsprechend anzupassen ist. Das
Ergebnis ist dann libRS232.so
gcc -shared -I/usr/local/bin/j2sdk.4.1_01/include
-I/usr/local/bin/j2sdk.4.1_01/include/linux RS232linux.c
Unter Windows ist so zu verfahren (die Verzeichnisse fuer Visual C++ und
Java sind wieder anzupassen):
C:\Program Files\Microsoft Visual Studio\VC98\BIN
Damit sind alle Umgebungsvariablen gesetzt und es kann RS232.dll
erstellt werden mit :
cl -Ic:\java\include -Ic:\java\include\win32 -LD RS232windows.c
-FeRS232.dll
Der Java-Client wird kompiliert wird
javac AVRprog
Damit werden auch automatisch die RS232*.java Dateien kompiliert.
Die progger-Software wird assembliert mit
./gavrasm progger.asm
Dateiliste der ZIP-Datei:
---------------------------------------------
28833 02-16-03 14:14 progger.asm
2311 02-16-03 14:17 dbg115.inc
4092 02-16-03 14:17 progger.hex
45056 01-29-03 00:04 RS232.dll
8247 02-01-03 00:21 libRS232.so
3337 02-15-03 12:37 RS232.class
988 02-01-03 00:16 RS232InputStream.class
1078 01-30-03 15:07 RS232OutputStream.class
9628 02-15-03 12:31 AVRprog.class
896 01-30-03 13:07 HalloWelt.class
1811 02-06-03 12:41 RS232Native.h
6476 02-16-03 13:16 RS232linux.c
4811 02-16-03 13:30 RS232windows.c
4042 02-15-03 12:37 RS232.java
1597 02-01-03 00:16 RS232InputStream.java
1626 01-30-03 14:13 RS232OutputStream.java
181 02-15-03 21:08 liesmich.txt
Der Vollstaendigkeit hier noch ein kleines Java-Programm, mit dem ich
den Zugriff auf die
serielle Schnittstelle getestet hatte: Ping.java
import java.io.*;
import java.util.*;
public class Ping {
static InputStream in = null;
static OutputStream out = null;
/**
*
*/
static public RS232 openRS232(String portName) {
RS232 port = RS232.open(portName, 19200, 8, 0);
in = port.getInputStream();
out = port.getOutputStream();
return port;
}
static public void main(String[] params) {
String portName = null;
int loops = 10;
byte[] outBuffer = "ping".getBytes();
byte[] inBuffer = new byte[4];
long startTime = 0;
long endTime = 0;
long diff = 0;
switch (params.length) {
case 0 :
System.out.println("Ping.java: !!! specify port name ! ") ;
return;
case 1 :
portName = params[0];
break ;
case 2 :
portName = params[0];
loops = Integer.parseInt(params[1]);
break ;
default :
System.out.println("Ping.java: wrong parameter count !!!") ;
return;
}
RS232 port1 = openRS232(portName);
// RS232 port2 = RS232.open("/dev/ttyS1", 19200, 8, 0);
startTime = System.currentTimeMillis();
try {
for (int i= 0; i < loops; i++) {
out.write(outBuffer);
System.out.println("Ping.java: outBuffer "+new String(outBuffer)) ;
in.read(inBuffer);
System.out.println("Ping.java: inBuffer "+new String(inBuffer)) ;
}
} catch (Exception ex) {
System.out.println("Ping.java: ex: "+ex) ;
}
endTime = System.currentTimeMillis();
diff = endTime - startTime ;
System.out.println("Ping.java: for "+loops+" loops: "+diff) ;
port1.close();
}
}
Hier die Schaltung und die Software AVR 910 (scrollen)
http://www.atmel.com/dyn/products/app_notes.asp?family_id=607
Hier die erweiterte Software. Man muß sich zwar anmelden, aber dafür
bleiben denn auch Spielekonsolenbauer aus dem Forum. Es wäre natürlich
leichter gewesen das File hier reinzustellen aber ich verstehe die Bitte
von Andreas, nur zu linken.
http://www.avrfreaks.net/Freaks/freakshow.php
Tip: Studio 3.55
<Project>
<Project Settings...>
<Output file formats>
Intel Intellec 8/MDS (Intel Hex)
Es wird ein HEX file erzeugt
<Tools>
AVR Prog
Pfad vom HEX file
Wenn der Programmer funktioniert meldet er sich.
Hallo AVR Programmierer,
hier ist der Thread aus dem AVR Forum zur Änderung für Mega8:
http://www.avrfreaks.net/phorum/read.php?f=3&i=27124&t=27094#27124
Hir noch mal das wesentliche für alle die nicht registriert sind:
Add the following constants under the "Device Codes" section:
.equ m8 = 0x76 ; ATmega8
.equ m8b = 0x77 ; ATmega8 BOOT
Also, under "w3:":
ldi u_data,m8 ; putc (mega8);
rcall putc
ldi u_data,m8b ; putc (mega8 BOOT);
rcall putc
and under "w7:":
cpi device,m8 ; (device != m8) &&
breq w72
cpi device,m8b ; (device != m8 BOOT) &&
breq w72
Finally, under "writeFLASHdelay:":
cpi device,m8
breq w92
cpi device,m8b
breq w92
Hallo,
für den GNU Java Compiler bzw. Interpreter (gcj bzw. gij) ist die
libRS232.so Bibliothek vorher händisch in das Verzeichnis zu kopieren,
das in LD_LIBRARY_PATH spezifiziert ist. Dann funktioniert das ganze
auch mit GNU Java.
Das automatische Installieren der lib durch die RS232-Klasse geht leider
nicht, da gij die Systemvariable "java.library.path" (noch) nicht kennt.
Vielen Dank an die AVRfreaks-Leser für die Hinweise auf die notwendigen
Änderungen für den MEGA8. Habt Ihr zufällig bei den freaks gelesen, daß
jemand das STK500 protokoll implementiert ? Die Spezifikation an sich
ist zwar von Atmel offengelegt, aber mir ist momentan nicht bekannt, daß
jemand was konkretes dazu programmiert. Ich meine also, daß entweder von
Linux aus das STK500 programmiert werden kann und/oder daß ein AVR so
programmiert wird, daß er sich wie ein STK500 verhält (ggfls. auf
Steckbrett) und mit STK500.exe bzw. AVR Studio kommunizieren kann.
Danke,
Gerhard
hi...i am working on a data logger using ATMEGA16L.
I need to interface a keypad with my microcontroller..wheer can i find
monitor program for the ATMEGA16L