Re: AVR Synthesizer "WAVE 1"
Hallöchen..
Heute habe ich die Software für das SD Karten Interface im Synth aktualisiert und einen Hardware Fehler am SD Kartenslot beseitigt. Auf den Fehler bin ich durch das Testen von verschiedenen neuen SD Karten gestoßen. Die neuen 4 GByte großen SD Karten (Philips, Intenso, SanDisk, alle Class4) hatten fast alle das Problem, das sie bei einem SPI Takt von 16MHz nicht funktionierten. Nur mit meine alte 4GB SanDisk (Class 2) hatte ich keine Probleme. Die Ursache war aber schnell gefunden. Für die SD Karte verwende ich ein sogenanntes Breakout Board mit einem SD Kartenslot (siehe Bild). Dieses Board besitzt für die Steuerleitungen zur SD Karte Pegelwandler von 5 Volt auf 3.3 Volt. Das ist zB notwendig wenn man mit einem Arduino Board und einem ATmega mit 5 Volt Betriebspannung arbeitet. In meinem Synth verwende ich aber einen Xmega128A1 mit 3.3 Volt Betriebspannung. Eine Pegelanpassung ist dann eigentlich nicht mehr erforderlich. Der Grund für die Nutzung eines solchen Boards war der, dass ich den SD Kartenslot nicht direkt auf die Lochraster Platine auflöten wollte. Ich wollte eine solide und mechanische belastbare Lösung. Für das Serienprodukt wird der SD Kartenslot aber direkt auf die Platine kommen.
Auf dem Breakout Board der SD Karte kann man über einen Schalter die Versorgungsspannung von 5 Volt auf 3.3 Volt anpassen. Diese Pegelwandler scheinen mit einem 16Mhz SPI Takt überfordert zu sein. Aus diesem Grund habe ich die Pegelwandler überprückt so das die Steuerleitungen von der SD Karte direkt mit dem Prozessor Port verbunden sind. Notwendige Pullup Widerstände werden per Software im Xmega aufgeschaltet. Jetzt funktionieren alle SD Karten mit 16MHz SPI problemlos.
SD Karte Breakout Board
Die Datenansteuerung für das LCD Display habe ich auf dem MCU Board noch etwas abgeändert und beschleunigt. Der 16Bit Datenbus wird jetzt über ein Latch vom Typ 74HC573 über den Prozessor PortC bereitgestellt.
MCU Board
Große Darstellung:
https://ox1aha.dm2302.livefilestore.com ... ard2.2.jpg
Die Übertragung eines 16Bit großen Datenwortes ins Datenregister des LCDs dauert jetzt nur noch 8 Taktzyklen.
Code:
//*************************************************************************
// write 16 Bit Data to SainSmart 3.2 LCD
//*************************************************************************
void write_data(uint8_t data_h, uint8_t data_l)
{
// set lcd data register
SET_RS;
// send high Byte to LCD Port
VPORT0.OUT = data_h;
SET_LE;
SET_LE; // wait 1 clk for LE because too short for 74HC573
CLR_LE;
// send low byte to LCD Port
VPORT0.OUT = data_l;
// set LCD Wolfgang Rudolph Signal
CLR_WR;
SET_WR;
CLR_RS;
}
Eine zusätzliche Steuerleitung für das Latch Enable Signal am 74HC573 wird zusammen mit dem WR und DC Signal an PORTQ des Xmega bereitgestellt. Der CS- und RD-Anschluss am LCD wird nicht benutzt und liegt auf high. Die freigewordenen Portleitungen werden als spätere Option für zB vier frei konfigurierbare Potis am ADC-Port des Prozessors benutzt.
Von einem User im aus dem Mutable Forum bekam ich einen, wie ich finde, sehr guten Designe Vorschlag für das LCD Menü. Dieser gefällt mir sehr gut
GUI Designe Vorschlag von rumpelfilter aus dem Mutable Forum
Gruß Rolf