Forum: Projekte & Code AVR Programmierer


von Gerhard Paulus (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

anbei Assemblercode für einen Programmierer auf Basis AVR AT90S4433 
(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

von Markus (Gast)


Lesenswert?

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/

von Gerhard Paulus (Gast)


Lesenswert?

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

von Gerhard Paulus (Gast)


Lesenswert?

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();

  }

}

von Frankl (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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

von Gerhard Paulus (Gast)


Lesenswert?

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

von preeti (Gast)


Lesenswert?

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

von Robert (Gast)


Lesenswert?

Hi Preeti,

do you need a program for interfacing a keypad?

Robert

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
Noch kein Account? Hier anmelden.