Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
LiFePO4 Speicher Test

K (WTV020 wurde nach WTV020-Soundmodul am AVR-Microcontroller verschoben)
Zeile 1: Zeile 1:
 
  
 
*Inhaltsverzeichnis
 
*Inhaltsverzeichnis

Version vom 25. Juni 2014, 21:02 Uhr

  • Inhaltsverzeichnis
    • Einleitung
    • Voraussetzungen
    • Benötigte Hardware
    • Hinweise zum Aufbau
    • Funktionstest
    • Anschluss an den Controller
    • Troubleshooting
    • Beispielcode mit AVR-assembler
    • Autor:

Einleitung:

Dieser Artikel richtet sich an Einsteiger, die das Soundmodul WTV020-SD16-P am AVR-Controller betreiben wollen. Er soll bei der Lösung von Problemen helfen, die bei der Inbetriebnahme des WTV020 auftreten. Er erhebt nicht den Anspruch auf Vollständigkeit, behandelt aber alle Tücken, die ich erlebt habe. Ziel ist es, dem Bastler die mehrtägige Fehlersuche, die ich erleiden musste, zu ersparen. Es richtet sich auch an Anwender, die an Stelle von BASCOM oder C lieber mit Assembler programmieren.

Voraussetzungen:

  • elektronische Grundkenntnisse
  • Grundkenntnisse in AVR-assembler
  • Das WTV020 Manual

Benötigte Hardware:

  • Ein Steckboard, um die Schaltung schnell aufzubauen (und Beschädigungen beim Löten zu vermeiden).
  • Ein WTV020-SD16-P (Das WTV020-SD20-S sollte ebenfalls funktionieren).
    Ich empfehle, gleich 2 Stück zu kaufen (das sollte bei einem Preis von ca. 3 Euro kein Problem sein). Ich habe 2 Stück gebraucht, bis es funktioniert hat!
  • Ein AVR-Controller (Ich habe einen Attiny13 verwendet).
  • Mehrere Micro-SD-Karten (max. 2GB),da nicht alle Karten funktionieren (Ich verwende ein 1GB-Karte).
  • Ein Lautsprecher (8 Ohm). Ich weiss nicht, ob 4 Ohm für den WTV020 eine zu grosse Last sind.
  • Die üblichen Elektronik-Kleinteile zur Beschaltung der IC's.

Hinweise zum Aufbau:

Ich empfehle, die Schaltung auf einem Steckboard aufzubauen und mit einer 9-Volt Batterie mit 5-Volt Spannungsregler (7805) zu betreiben.
Dies hat den Vorteil, dass im Falle einer falschen Verdrahtung die Überlebens-Chancen der IC's steigen, da die Batterie nur einen begrenzten Strom liefert. Natürlich müssen noch 2 Dioden in die Versorgungsleitung eingebaut werden, um die Spannung auf ca. 4V herabzusetzen. Keine Angst! 4 Volt sind kein Problem. Unterhalb von 3,6 Volt hat das Teil bei mir sowieso nicht funktioniert. Der WTV020 kann zwar auch theoretisch auf der Rückseite auf 5-Volt-Betrieb umgelötet werden. Dies hat bei mir ebenfalls nicht funktioniert und hat mich viel Zeit gekostet.

Funktiostest:

Formatiere die SD-Karte mit FAT16 -nicht FAT32!-.
Verwende auf jeden Fall zuerst die Beispieldateien im AD4-Format, die Du Dir vom Internet herunterladen kannst. Vermeide zunächst WAV-Dateien aus gerippten CD's. Diese haben bei mir nur ein total übersteuertes Krächzen erzeugt.
Teste das Teil zunächst im Tastermodus. Dies ist wirklich sehr einfach (s. WTV020-Manual).
Du hörst nichts? -> s. Troubleshooting. Es hat geklappt? - Dann geht es jetzt weiter.

Anschluss an den Controller:

Wichtig! Verbinde alle Leitungen zwischen dem WTV020 und dem Controller über 470 oder 510 Ohm (reset, busy, data, clk).
Wenn Du das nicht beachtest, wird sich der WTV020 höchstwahrscheinlich verabschieden.

Troubleshooting:

Tastermodus:

  • Totenstille
    • Überprüfe Betriebsspannung und die Funktion des Lautsprechers (3,3 Volt sind unter Umständen nicht ausreichend). Ist hier alles in Ordnung, dann ist das Modul offensichtlich defekt. Es wurde bereits von kalten Lötstellen am Modul berichet.
  • Kein Sound, aber Knacken bei der Betätigung eines Tasters hörbar.
    • SD-Karte sitzt nicht korrekt im Slot (Kontaktproblem). Dies ist gar nicht so selten.
    • SD-Karte falsch formatiert. Diese muss mit FAT16 formatiert werden.
    • SD-Karte zu gross. Maximal 2 GB zulässig.
    • Unverträglichkeit mit SD-Karte. Nicht alle Karten funktionieren.
    • Falsches Format der Sound-Datei. Der WTV020 funktioniert nur mit Dateinamen die aus einer 4-stelligen Zahl und dem WAV- oder AD4-Format bestehen (z. B. "0001.AD4").
  • Modul defekt.

WTV020 am AVR (Two Line Serial Mode):

  • Totenstille
    • Modul defekt, obwohl dieses im Tastermodus funktioniert.
  • Knacken beim Einschalten, aber kein Sound.
    • Modul defekt, obwohl dieses Tastermodus funktioniert. Das war bei meinem ersten Modul der Fall.
    • Programmfehler (zu kurze Timings). Die Warteschleifen lieber etwas länger lassen (Die Angaben im Datenblatt des WTV020 sind scheinbar etwas knapp bemessen).
    • Programmfehler (die Musikdatei, die im Programm angegeben ist, existiert nicht auf der SD-Karte).
    • Andere Programmfehler

Beispielcode mit AVR-assembler:


/*
 * WTV020.asm
 *
 *  Created: 22.05.2014 07:18:47
 *  Author: schachwolf@web.de
 */ 

/* 
 *  Dieses Programm wurde für den "attiny13" geschrieben, der mit 1MHz Taktfrequenz betrieben wird (Standardeinstellung).
 *  Die Warteschleifen wurden gemäß dem Timing-Diagrams des WTV020 erstellt aber bewusst etwas länger gewählt, um eine
 *  zuverlässige Funktion des WTV020-Moduls zu gewährleisten.
 */

#include "tn13def.inc"		

.org 0x00
     rjmp start

.equ reset = 0				;alias-Namen für die einzelnen Portbits  
.equ data = 1
.equ busy = 2
.equ clk = 3
.def temp1 = r16
.def temp2 = r17
.def temp3 = r18
.def temp4 = r19

start:

ldi temp1, RAMEND
out SPL, temp1	
ldi temp1, 0b00001011	                ;alle Ports ausser PB2 (busy) auf Ausgang
out DDRB, temp1
sbi PORTB, reset		        ;kein Reset
sbi PORTB, clk			        ;kein Takt

rcall warte_300ms		        ;Initialisierungsphase
cbi PORTB, reset 		        ;Diese Sequenz wurde gemäss dem Timing-Diagramm
rcall warte_5ms	                        ;aus dem WTV020-Datenblatt erstellt
sbi PORTB, reset		
rcall warte_300ms
					;Jetzt geht s los! Welche Titelnummer soll gespielt werden?
ldi temp1, 0b00000001                   ;Titelnummer (entspricht 0001.AD4 bzw. 0001.wav auf SD-Karte) -> low-byte
ldi temp2, 0b00000000                   ;Titelnummer -> high-byte
rcall uebergebe

warte_auf_WTV020:                       ;nun wird gewartet, bis der WTV020 fertig ist 
sbic PINB, busy
rjmp warte_auf_WTV020
rcall warte_300ms                       ;kleine Pause, bevor der nächste Titel gespielt wird
					;jetzt geht es zum nächsten Titel (0511)
ldi temp1, 0b11111111                   ;Titelnummer (entspricht 0511.AD4 bzw. 0511.wav auf SD-Karte) -> low-byte
ldi temp2, 0b00000001                   ;Titelnummer -> high-byte
rcall uebergebe

rjmp ende
		
uebergebe:                              ;Diese Funktion liest den Inhalt von temp1/temp2 und übergibt die Daten Bit für Bit an den WTV020  
     rcall hole_daten                   ;Das erste bit (Startbit) wird geholt 
     cbi PORTB, clk			; -> und an den WTV020 übergeben
     rcall warte_3ms                    ;Das Startbit braucht etwas mehr Zeit  (s. WTV020-Datenblatt)
                                        ;(Laut Datenblatt 2ms. 3ms sind sicherer) 
     ldi temp4, 15                      ;Die nächsten 15-bit müssen noch geholt und zum Soundmnodul übertragen werden
     sbi PORTB, clk
     uebergebe_1:			;Dies geschieht mit der Schleife "uebergabe_1"
     rcall warte_200us
     dec temp4				
     rcall hole_daten
     cbi PORTB, clk
     rcall warte_200us
     sbi PORTB, clk
     cpi temp4, 0
     breq uebergebe_ende								
     rjmp uebergebe_1
     uebergebe_ende:
ret	

ende:
	rjmp ende




hole_daten:                             ;das 16-bit-Datenregister (temp1/ temp2) wird insgesamt 16x 
     lsl temp1                          ;nach links geschoben und in Abhängigkeit vom carry-bit
     rol temp2                          ;wird anschliessend das Datenbit gesetzt bzw. nicht gesetzt  
     brcc hole_daten_2
     sbi PORTB, data
     rjmp hole_daten_ende
     hole_daten_2:
     cbi PORTB, data
     hole_daten_ende:
ret	

     warte_3ms:                         ;warte 3,45 ms
     push temp1
     push temp2								
     clr temp1
     clr temp2
     warte_3ms_1:
     inc temp2	
     warte_3ms_2:
     inc temp1
     cpi temp1, 90							
     brne warte_3ms_2
     cpi temp2, 4
     brne warte_3ms_1
     pop temp2
     pop temp1
ret

warte_5ms:                              ;warte 5,6 ms
     push temp1
     push temp2								
     clr temp1
     clr temp2
     warte_5ms_1:
     inc temp2	
     warte_5ms_2:
     inc temp1
     cpi temp1, 90							
     brne warte_5ms_2
     cpi temp2, 6
     brne warte_5ms_1
     pop temp2
     pop temp1
ret

warte_200us:                            ;warte 270 us
     push temp1
     clr temp1				
     warte_200us_1:
     inc temp1
     cpi temp1, 65
     brne warte_200us_1
     pop temp1
ret

warte_300ms:                            ;warte 300 ms
     push temp1
     push temp2
     push temp3
     clr temp1
     clr temp2
     clr temp3
     warte_300ms_1:
     inc temp3	
     warte_300ms_2:								
     inc temp2
     clr temp1
     warte_300ms_3:
     inc temp1
     cpi temp1, 100							
     brne warte_300ms_3
     cpi temp2, 250
     brne warte_300ms_2
     cpi temp3, 3
     brne warte_300ms_1
     pop temp3
     pop temp2
     pop temp1
ret

Autor:

  • schachwolf (E-Mail: Schachwolf@web.de)

LiFePO4 Speicher Test