Christian-Marty.ch´s Electric Things

Mocca - Mikrocontroller System mit ATmega2560

July 17, 2015

Die 5V Spannungsversorgung

Die Speisung wurde mit einem DC/DC Wandler Modul (Recom R-78B5.0-1.5) aufgebaut

V17 dient als Verpolungsschutz, V16 schütz den Spannungsregler falls an dessen Ausgang eine höhere Spannung als an dessen Eingang anliegt.

Mit dem Jumper X13 kann zwischen Speisung über USB oder externen Speisung gewählt werden. Wenn über USB gespiesen wird, sollte beachtet werden, dass maximal 500mA Strom zur Verfügung steht. Dieser Wert ist vor allem kritisch, sobald eine externe Peripherie angeschlossen werden soll.

 


Die 3.3V Spannungsversorgung

Für das LCD wird eine Zusätzliche 3.3v Spannungsversorgung benötigt. Der rest des Mocca-Boards wird mit 5V versorgt.


RS-232

An der RS-232 sind sowohl die TX und RX Signale so wie auch auf die CTS und RTS Signale zvorhanden. So ist es möglich, einen Hardware-Handshake oder eine Hardware- Flusskontrolle für die Datenübertragung zu implementieren. Wird die Verwendung von CTS und RTS nicht gewünscht, so können diese beiden Signale über einen Jumper zwischen Pin 2 und 3 an X7 gebrückt werden. Mit X14 können die TX und RX Leitungen auf der Leiterplatte ausgekreuzt werden. So werden keine gekreuzten RS-232 Kabel benötigt.


USB zu USART Konverter

Als Reaktion auf den Trend in neuen Computern keine RS-232 mehr zu verbauen, wurde zusätzlich ein USB zu USART Konverter auf dem Mocca-Board integriert. Dadurch ist es möglich, das Mocca-Board auch an modernen Computern ohne RS-232 vollumfänglich zu benutzen. Als Kontroller wird ein Atmega32U2 eingesetzt. Das Design der USB zu UART Brücke ist an jenes der Arduino-Boards angelehnt. Dies ermöglichst es, die Software von Arduino für den USB-Kontroller verwenden zu können.


Kippschlater

Die Schalter sind über einen tristate-fähigen Treiber an den Mikrokontroller angeschlossen. Durch Entfernen des Jumpers an X12 können diese vom Mikrokontroller abgekoppelt werden. So ist es möglich, den von den Schaltern belegten Port (PORT K) auch anderweitig zu verwenden.

PORT K verfügt über einen Pin Change Interrupt. Das bedeutet, dass bei einer Änderung am Port ein Interrupt ausgelöst wird. So können Änderungen an einem der Schalter detektiert werden, ohne diese kontinuierlich eigelesen zu müssen.

 


Taster

Die vier Taster sind mit RC-Gliedern entprellt und werden über einen Schmitt Trigger auf die Pins PE4 bis PE7 geführt. Über diese Pins können Gleichzeitig die externen Interrupts INT4 bis INT7 ausgelöst werden. Über vier Jumper an X16 können die Taster vom Port abgekoppelt werden.


Potentiometer

Die Potentiometer sind mit den ADC-Kanälen 0 bis 3 verbunden. über die Jumper an X15 können diese vom Mikrocontroller getrent werden. Die 1k Widerstanände R65 bis R68 schützen die Potentiometer bei falscher Konfiguration der Ausgangsregister des Mikrocontrollers.


LEDs

Die acht einzelnen LEDs sowie die RGB-LED werden über FET an den Mikrokontroller angeschlossen. So nimmt die Ansteuerung der LEDs nicht viel Strom von den Mikrokotrollerpins auf und diese haben noch genug Reserve um auch eine externe Peripherie zusammen mit den LEDs betreiben zu können. Über die Jumper an X9 bzw. X10 können die RGB-LED bzw. die acht einzelnen LEDs deaktiviert werden.


LCD

Als LCD wir ein 20x4 Zeichen grosses, Alphanumerisches Displaymodul des Herstellers Electronic Assembly (EA DIP203J-4NLW) verwendet. Dieses Displaymodul ist eines der kleinsten 20x4 Zeichen Displaymodule die momentan verfügbar sind. Andere Module währen zwar günstiger und besser verfügbar gewesen, waren jedoch einfach viel zu gross.

Leider verträgt dieses Display nur 3.3V. Die nötigen Pegelwandler wurden mitels Spannungsteiler realisirt.

Anschluss an den Mikrokontroller

Das LCD ist an den PORT G des Mikrokontrollers angeschlossen. Dieser Port hat nur 6 IOs und ist als einziger Port nicht über eine Stiftwanne erreichbar. Zwei dieser IOs werden durch den Quarz der Real Time Clock belegt, die restlichen vier IOs werden für die Ansteuerung des Displays verwenden.

Die Mocca Demo, welche als Grundlage für Mocha-Projekte genutzt werden kann.

[[C_highlighter? &file = data/legacy/Mocca/source/Mocca_Demo.c]] [[C_highlighter? &file = data/legacy/Mocca/source/Mocca_Treiber.h]] [[C_highlighter? &file = data/legacy/Mocca/source/Mocca_Treiber.c]]

Als PDF herunterladen.

Abgesehen von der Programmierung über einen Bootloader, unterstützt das Mocca-Board drei verschiedene Methoden, um das Programm auf den Mikrocontroller zu laden.

ISP (In System Programming)

ISP ist DER Programmierstandard für Atmel AVR Mikrokontroller. Über ISP können sowohl der Flash-Speicher als auch der EEPROM und die Fusebits des Mikrokontrollers im System programmiert werden. ISP ist auf allen Atmel Kontrollern aus der AVR Serie standardmässig aktiviert.

Eine ausführliche dokumentation des ISP-standard ist in der Atmel Application Note AVR910 zu finden.

Achtung: Zu grosse Kapazitäten an den betroffenen Leitungen (PB1 bis PB3) können die Programmierung über ISP verlangsamen oder stören. Falls eine externe Peripherie an den PORT B angeschlossen wird, ist darauf zu achten, dass diese keine Ausgänge auf die Pins PB1 bis PB3 führt. Des Weiteren sollte an diesen Pins keine Peripherie angeschlossen werden, die durch ein falsches Signal an einer diesen Pins zerstört werden kann.

JTAG (Joint Test Action Group)

JTAG ist eine universelle Schnittstelle, die ursprünglich zum Testen von Lötstellen auf Leiterplatten nach dem Herstellungsprozesses entwickelt wurde. Über JTAG kann, wie über ISP, auf die internen Speicher des Mikrokontrollers zugegriffen werden. Ergänzend dazu ist über JTAG das Debuggen des Mikrokontrollers, bzw. dessen Software, möglich.

Die Programmierung über JTAG ist nicht standartmässig aktiviert. Um JTAG zum Programmieren verwenden zu können, muss zuerst ein Fusebit gesetzt werden. Dafür wird ein ISP Programmiergerät benötigt.

Achtung: Wenn JTAG aktiviert ist, sind die Pins PF4 bis PF7 belegt und können nicht mehr anderweitig verwendet werden!

DebugWIRE (Wird von den älteren AVR Controllern wie dem Atmega2560 nicht unterstüzt)

DebugWIRE ermöglicht es den Mikrokontroller über ausschliesslich die Reset-Leitung programmieren und debuggen zu können. Da nur die Reset-Leitung verwendet wird, die in den meisten Anwendungen ohnehin nicht verwendet wird, bleiben auch beim Debuggen, anders als bei Verwendung von JTAG, alle anderen Leitungen frei.

DebugWIRE ist nicht standardmässig aktiviert. DebugWIRE sollte nicht manuell in den Fusebits aktiviert werden. AtmelStudio verwaltet die Aktivierung von DebugWIRE selbständenig.

Achtung: Sobald DebugWIRE aktiviert wurde, kann der Mikrokontroller ausschliesslich über DebugWIRE programmiert werden. Um DebugWIRE wieder deaktivieren zu können, wird also ein Programmiergerät benötigt, dass DebugWIRE unterstützt. Die Deaktivierung über ISP ist nicht möglich!

Parallel / High Voltage Programmierung

Notfalls kann der Mikrokontroller auch mit einem Parallelprogrammer programmiert werden. So können zum Beispiel falsch gesetzte Fusebits korrigiert werden, falls der Kontroller nicht mehr über ISP, DebugWIRE oder JTAG ansprechbar ist.

Um den Parallelprogrammer verwenden zu können, muss der Lötjumper SJ3 aufgetrennt werden.

Achtung: Der Parallelprogrammer arbeitet mit 12V Pegeln am Reset Eingang. Wird die Diode V14 nicht entfernt, so kann dies zu Schäden am Programmiergerät oder am Mocca-Board führen! Der Parallelprogrammer sollte wirklich nur verwendet werden, wenn eine Programmierung über eine andere Schnittstelle nicht mehr möglich ist.

Für weitere Informationen siehe das Datenblatt des ATmega2560 Kapitel: Memory Programming, Abschnitt: Parallel Programming, ab Seite 339.

Kein Spannungsteiler für den Reset-Pin des LCD vorhanden

Beschreibung:

Der Resetpin des LCD ist direkt und nicht über einen Spannugsteiler mit dem Mikrocontroller verbunden. Dadurch liegen 5V anstatt 3.3V am Resetpin an.

Lösung:

Portpin für einen High-Pegel als Eingang definieren. Durch den im LCD internen Pull-Up wird die spannung auf 3.3V gezogen. Für einen Low-Pegel den Portpin als Ausgang definiren und auf Low ziehen.