\documentclass[11pt,a4paper]{article}
% language support
\usepackage[german]{babel}
\usepackage[utf8]{inputenc}
\usepackage{pslatex} % use native PostScript fonts
\usepackage{multicol}
\usepackage{url} % \url{} \path{} with correct "hyphenation"
\usepackage{fancyvrb} % for code examples

% \voffset-10mm
% \pagestyle{empty}
% \pagestyle{plain}
% \pagestyle{headings}
% \renewcommand{\baselinestretch}{1.08}
%\usepackage{xspace}
\parindent=0pt

\begin{document}

\title{USBasp — ein Programmierer für AVRs}[USBasp–Programmierer]

\author{Ulrich Hoffmann}

\maketitle

\begin{multicols}{2}

\begin{abstract}
Die \emph{Im--System--Programmier}--Schnittstelle (engl.\ in system programming, ISP) der Firma Atmel erlaubt Programmiergeräten, AVR--Prozessoren direkt in der Schaltung zu programmieren. Der von Thomas Fischl entwickelte Open--Source--Programmierer USBasp ist ein solches Gerät, das selbst von einem ATMega8--Prozessor gesteuert wird und seine USB--Schnittstelle rein durch Software realisiert.
\end{abstract}


% \renewcommand{\figurename}{Tabelle}

% \section{Bootstrap --- Bootstrap}
Forth--Programme wollen ihren Weg in den Programmspeicher der AVR--Prozessoren finden.

Handelt es sich um ein interaktives Forth--System, so muss nur der Forth--Kern als eine Art Bootstrap--Loader in den Prozessor geschrieben werden. Forth--Programme werden dann interaktiv auf diesen Kern geladen und gegebenenfalls durch Autoprogrammierung der AVR--Chips in den Programmspeicher übernommen. Handelt es  sich um einen Forth--Cross--Compiler, dann werden Forth--Anwendungen schon auf dem Entwicklungs--PC in AVR--Code übersetzt und gelangen dann auf direktem Weg in den Chip. In beiden Fällen muss der AVR--Programmspeicher von außen durch ein Programmiergerät beschrieben werden. Der von Thomas Fischl entwickelte 
kostengünstige Open--Source--AVR--Programmierer USBasp kann dazu verwendet werden.

Er wird wie folgt zwischen Entwicklungs--PC und AVR--Zielsystem geschaltet:

\begin{center}
\includegraphics[width=0.8\columnwidth]{2007-Sonderheft-AVR/usbasp-connection}\\
\end{center}

Die Verbindung zum Entwicklungs--PC (oder Mac) wird dabei über eine USB--Schnittstelle hergestellt, deren Ansteuerung im USBasp durch die AVR--USB--Treiber--Firmware [\ref{usbasp:avruasb}] von Objective Development rein durch Software realisiert ist. Die Verbindung zum Zielsystem erfolgt über die \emph{Im--System--Programmier}--Schnittstelle ISP mittels des AVR--typischen 6Pin-- oder 10Pin--Steckverbinders [\ref{usbasp:ispconnectors}]: 

\begin{center}
\includegraphics[width=0.8\columnwidth]{2007-Sonderheft-AVR/ispconnector6pin}\\
\end{center}

Im USBasp werkelt selbst ein ATMega8--Prozessor, der neben dem AVR--USB-Treiber auch
Thomas Fischls freie Firmware enthält, die die ISP--Schnittstelle bedient und die Programmieralgorithmen realisiert. 
Eine Steuersoftware auf dem Entwicklungs--PC kontrolliert wiederum den USBasp. Unter Windows, Linux, Mac OS X, \ldots kommt das Open--Source--Kommandozeilen--Programm AVRDUDE [\ref{usbasp:avrdude}] zum Einsatz, das neben zahlreichen anderen AVR--Programmierern eben auch den USBasp unterstützt. Zum Ansprechen der USB--Schnittstelle (auf PC--Seite) stützt sich AVRDUDE dabei auf die Open--Source--Bibliothek LibUsb [\ref{usbasp:libusb}].

Der Programmierer lässt sich auch von Ungeübten ohne große Probleme selbst zusammenbauen. Neben dem ATMega8--Prozessor werden nur ein Quarz, zwei Hände voll Widerstände, ein paar Kondensatoren und zwei Leuchtdioden zur Statusanzeige benötigt. Verwendet man Thomas Fischls Platinenentwurf, dann kann ein aufgebauter USBasp so aussehen: 

\begin{center}
\includegraphics[width=0.8\columnwidth]{2007-Sonderheft-AVR/usbasp-pict}\\
Ein betriebsbereiter USBasp--Programmierer
\end{center}

Weitere Informationen, unter anderem der USBasp--Schaltplan, finden sich auf der USBasp--Homepage [\ref{usbasp:usbasp}].

\end{multicols}


\section{Links}
\begin{footnotesize}
\renewcommand{\labelenumi}{[\arabic{enumi}]}
\begin{enumerate}
\item \label{usbasp:usbasp} USBasp--Hompage: \url{http://www.fischl.de/usbasp/}
\item \label{usbasp:avruasb}AVR--USB--Treiber (rein in Software): \url{http://www.obdev.at/products/avrusb/}
\item \label{usbasp:avrdude} AVRDUDE, {\bf AVR}--{\bf D}ownloader/{\bf U}ploa{\bf DE}r: \url{http://www.nongnu.org/avrdude/}
\item \label{usbasp:libusb} LibUsb für Unix: \url{http://libusb.sourceforge.net/}
\item LibUsb für Windows: \url{http://libusb-win32.sourceforge.net/}
\item Atmel--AVR bei Wikipedia: \url{http://de.wikipedia.org/wiki/Atmel_AVR}
\item \label{usbasp:ispconnectors} ISP--Steckverbinder: \url{http://www.hardwarebook.info/AVR_ISP}
\end{enumerate}
\end{footnotesize}

\end{document}
