mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik WTV020 Start - Stop - ohne AVR


Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich will einen Türgong mit den WTV Modul realisieren.
Leider habe ich überhaupt keinen Plan wie ich das mit einem AVR
hinbekomme.
Deshalb der diskrete Aufbau.
Der Wunsch war, das über die Start/Stop Taste die Melodie abgespielt
wird.
Gleichzeitig soll eine Led impulsartig blinken, die Werte gelten für die
cmos Variante des 555 (Hab kein Symbol für die cmos Variante.)
Um das zu steuern habe ich mir die Schaltung ausgedacht.
Soweit funktioniert das ganze, ich kann aber nur den Startimpuls für das
Soundmodul erzeugen, ich habe keine Idee woher ich ein 2. Impuls
herbekomme, am Ende des Sounds, bzw. hier - nach einer festen Zeit.
Der 4017 "verlängert" die Periodendauer auf 50sec (R+C Werte in der
Zeichnung stimmen nicht überein.)
Die Transistorstufe als Pegelwandler habe ich erstmal nur so
eingezeichnet, z.Z. ist ein Gatter vom 4093 dran.
Die Resettaste vom Modul will ich nicht bedienen, weil dann immer wieder
zum ersten Titel zurückgesprungen wird.
Der "Key A" wird später ein Optokoppler. Das Soundmodul ist nicht
eingezeichnet.
Mein Halbwissen reicht leider nicht mehr.

Vielen Dank, wenn sich jemand die Mühe macht.
Anbei die Schaltung

VG
carlo

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Leider habe ich überhaupt keinen Plan wie ich das mit einem AVR
> hinbekomme.

Hast du mal gesucht nach „Arduino wtv020 doorbell“. Da gibt es 
zahlreiche fertige Anleitungen, sogar Videos.

> Deshalb der diskrete Aufbau.
> über die Start/Stop Taste
> Gleichzeitig soll eine Led impulsartig blinken
> Ich habe keine Idee woher ich ein 2. Impuls herbekomme
> Der 4017 "verlängert" die Periodendauer

Du siehst, mit reinem diskreten Aufbau wird das kompliziert. Ich würde 
sogar behaupten, dass du dich besser etwas in Arduino einarbeitest (ist 
wirklich leicht), die Zeit wäre meiner Meinung nach besser investiert.

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du magst ja Recht haben, mich hätte es trotzdem interessiert,
na vielleicht kann ja noch jemand ein Idee einstellen.

Das Doorbell Prijekt habe ich auch gefunden und war überrascht, wie 
einfach es aufgebaut ist.

Deshalb:

Hab schonmal vor 3 Jahren mit AVR anfangen wollem. hatte mir bei Radig 
einen Programmer gekauft, das warst dann aber schon.

Seit ein paar Stunden versuche ich es nochmal...und komme mit der usb 
dll nicht weiter.

Gerät wird mittlerweile erkannt, aber trotzdem wird die dll nicht 
gefunden...
Werde mal einen neuen Thread aufmachen.

: Bearbeitet durch User
Autor: Harald A. (embedded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Z. schrieb:

> Hab schonmal vor 3 Jahren mit AVR anfangen wollem. hatte mir bei Radig
> einen Programmer gekauft, das warst dann aber schon.

Ich rede ja auch von Arduino. Ist zwar oft auch AVR, gegenüber der 
Direktprogrammierung aber doch noch deutlich einfacher. Für fast alles 
gibt es LIBs.
Als Beispiel(!) fallen mir die intelligenten LEDs wie WS2812 ein: Direkt 
in C erfordert das schon einiges an Erfahrung, per Arduino ist die erste 
Inbetriebnahme ein Zweizeiler bzw. das Abändern eines Beispiels, das bei 
der Lib immer dabei ist. Für WTV020 habe ich es nicht geprüft, aber auch 
da sollte es fertige LIBs geben.

Was meinst du mit usb dll? Einen Programmer brauchst du bei Arduino 
nicht, der ist quasi mit drin. Arduino installieren, USB anstöpseln, COM 
Port ermitteln und einstellen, Beispiel laden, los gehts.

Du hast anscheinend ja gute Kenntnisse in der Elektronik, daher wirst du 
Arduino recht schnell lieben lernen. Es ist selbst unter erfahrenen 
Programmierern oft in der Anwendung, weil man in Windeseile mal eben 
schnell Logic, SPI etc. realisieren kann.

: Bearbeitet durch User
Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Konkret spreche ich von einem Arduino Nano, den gibt es als Clone für 
ca. 1,50€ - allerdings mit Lieferzeit. Du bekommst auch per Prime einen 
für 5€, der ist dann übermorgen da, falls du in D wohnst.

Bei einem Clone kann es zwei Minimalhürden bei der Inbetriebnahme geben, 
die ich hier nenne:
1.
Statt des teuren FTDI USB-Serill Wandler ist meist ein CH340 verbaut, 
der kann das gleiche, benötigt aber einen anderen Treiber. Sehr leicht 
installierbar. Windows 10 kennt den schon so ohne Treiber-Download.

2.
Meist muss man in den Einstellungen „old bootloader“ wählen, das wars.

Mit einem Original-Arduino ist es tatsächlich Plug-and-Play, aber wie 
gesagt, es ist recht einfach. Wir werden Dir hier helfen.

Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Klingt gut, also bischen was habe ich schon...

ISP Programmer von Radig...

UNO Board, ich nehme an das man den Programmieren kann, hat aber einen 
6-poligen ISP Anschluß, Programmer hat einen 10 poligen Anschluß...

Dann noch ein mit 28pol. Fassung, sicher gleiche Verwendung wie der UNO.
Muss noch der Chip drauf....hab ich noch nicht.
Fehlen auch noch paar Bauteile, auf der LP steht was von 1x 10kOhm, aber 
drin ist ein 1kOhm, hab ihn noch nicht verlötet. Welcher muss rein?

So wie ich das sehe, scheint der UNO vollkommen ausreichend für den 
Anfang.

Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Klingt gut, also bischen was habe ich schon...

ISP Programmer von Radig...(3)

UNO Board, ich nehme an das man den Programmieren kann, hat aber einen 
6-poligen ISP Anschluß, Programmer hat einen 10 poligen Anschluß...(1)

Dann noch ein mit 28pol. Fassung, sicher gleiche Verwendung wie der UNO.
Muss noch der Chip drauf....hab ich noch nicht.
Fehlen auch noch paar Bauteile, auf der LP steht was von 1x 10kOhm, aber 
drin ist ein 1kOhm, hab ihn noch nicht verlötet. Welcher muss rein? (2)

So wie ich das sehe, scheint der UNO vollkommen ausreichend für den 
Anfang.

Autor: Harald A. (embedded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie bist du noch völlig falsch unterwegs. Bei einem Arduino 
brauchst du keinen Programmer und keinen 28pol. Sockel. Der 6Pin ist nur 
für den Fall, dass man den Bootloader tauschen will. Das kommt aber 
normalerweise nie vor. Bei Arduino kannst du deinen Programmer 
vergessen, den brauchst du nicht. Auch nicht dessen Software oder 
Compiler.

Der UNO geht, allerdings ist der relativ groß und der bleibt in der 
Schaltung. Daher hatte ich einen Nano vorgeschlagen, der ist besser 
integrierbar und auch Steckbrett-fähig.

Also, aus dem Bild braucht du nur 1., alles Andere kann in den Schrank. 
Schau dir noch einmal Videos zum Thema „Arduino Erste Schritte“ an, dann 
dürfte vieles klarer werden, hier ein Mehrteiler in Deutsch:

Youtube-Video "Arduino Tutorial - 1. Einführung (#1)"

: Bearbeitet durch User
Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, hab mir die ersten 4 Videos angesehen, verstehe jetzt was Du meinst.
Aber irgendwo kann man den Programmer doch verwenden, oder?

Bei dem WTV020 Modul habe ich nur für WTV020-SD16 Einträge gefunden,muss 
mal probieren ob das Modul einen Laut gibt. Meines ist ein WTV020M01 , 
soweit ich das richtig gefunden habe, liegt der Unterschied nur im 
Soundformat.

Wobei ich für meine Anwendung nur die Start Stop Taste brauche, Reset 
nur wenn sich das Modul aufhängt.

Außerdem noch Play - next was dann nach z.B. 5 Melodien wieder auf den 
Anfang springt.
Mal sehen ob ich es heute abend noch zusammenstecken kann.

: Bearbeitet durch User
Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin jetzt beim WTV020M1 Modul, hab "WTV020SD16P-master" in den Arduino 
eingebunden, von http://forum.arduino.cc/index.php/topic,117009.0.html
hab ich den code eingebunden
Ist für das SD16 Modul, hab ich aber nicht...

===================================
/*
Example: Control a WTV020-SD-16P module to play voices from an Arduino 
board.
Created by Diego J. Arevalo, August 6th, 2012.
Released into the public domain.
*/

#include <Wtv020sd16p.h>

int resetPin = 2;  // The pin number of the reset pin.
int clockPin = 3;  // The pin number of the clock pin.
int dataPin = 4;  // The pin number of the data pin.
int busyPin = 5;  // The pin number of the busy pin.

/*
Create an instance of the Wtv020sd16p class.
1st parameter: Reset pin number.
2nd parameter: Clock pin number.
3rd parameter: Data pin number.
4th parameter: Busy pin number.
*/
Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);

void setup() {
 //Initializes the module.
 wtv020sd16p.reset();
}

void loop() {
 //Plays synchronously an audio file. Busy pin is used for this method.
 wtv020sd16p.playVoice(0);
 //Plays asynchronously an audio file.
 wtv020sd16p.asyncPlayVoice(1);
 //Plays audio file number 1 during 2 seconds.
 delay(5000);
 //Pauses audio file number 1 during 2 seconds.
 wtv020sd16p.pauseVoice();
 delay(5000);
 //Resumes audio file number 1 during 2 seconds.
 wtv020sd16p.pauseVoice();
 delay(5000);
 //Stops current audio file playing.
 wtv020sd16p.stopVoice();
 //Plays synchronously an audio file. Busy pin is used for this method.
 wtv020sd16p.asyncPlayVoice(2);
 delay(2000);
 //Mutes audio file number 2 during 2 seconds.
 wtv020sd16p.mute();
 delay(2000);
 //Unmutes audio file number 2 during 2 seconds.
 wtv020sd16p.unmute();
 delay(2000);
 //Stops current audio file playing.
 wtv020sd16p.stopVoice();
}
===============================
Hochladen kommt Fehlermeldung:

Arduino: 1.8.8 (Windows 10), Board: "Arduino/Genuino Uno"

WTV020sd16_erster:22:1: error: 'Wtv020sd16p' does not name a type

 Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);

 ^

...\Arduino\WTV020sd16_erster\WTV020sd16_erster.ino: In function 'void 
setup()':

WTV020sd16_erster:26:2: error: 'wtv020sd16p' was not declared in this 
scope

  wtv020sd16p.reset();

  ^

...\Arduino\WTV020sd16_erster\WTV020sd16_erster.ino: In function 'void 
loop()':

WTV020sd16_erster:31:2: error: 'wtv020sd16p' was not declared in this 
scope

  wtv020sd16p.playVoice(0);

  ^

exit status 1
'Wtv020sd16p' does not name a type

: Bearbeitet durch User
Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als absoluter Neuling will ich ein WTV020M01 zum laufen bringen.
Einzeln aufgebaut funktioniert alles. Jetzt soll der Arduino das Modul 
steuern.
Genaugenommen brauche ich nur die Play/Stop/Next/Reset Funktion für 
einen Türgong.
Die lib ist im Programm eingebunden, ein Testsketch habe ich 
hochgeladen, das kommt allerdings eine fehlermeldung.
Hab mit 2 Varianten probiert, beide haben unterschiedliche 
Fehlermeldungen.

Hier die Erste Variante: (Auszug)
=================
/*
Example: Control a WTV020-SD-16P module to play voices from an Arduino 
board.
Created by Diego J. Arevalo, August 6th, 2012.
Released into the public domain.
*/
#include <WTV020SD16P.h>

int resetPin = 2;  // The pin number of the reset pin.
int clockPin = 3;  // The pin number of the clock pin.
int dataPin = 4;  // The pin number of the data pin.
int busyPin = 5;  // The pin number of the busy pin.

Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);
.
.
.
=================
Die letzte Zeile wird angemeckert: 'Wtv020sd16p' does not name a type


Zweite Variante:
=================
#include <WTV020SD16P.h>

int clockPin = 3;  // The pin number of the clock pin.
int dataPin = 4;  // The pin number of the data pin.
int busyPin = 5;  // The pin number of the busy pin.

/*
Create an instance of the Wtv020sd16p class.
 1nd parameter: Clock pin number.
 2rd parameter: Data pin number.
 3th parameter: Busy pin number.
 */

WTV020SD16P wtv020sd16p(clockPin,dataPin,busyPin);

void setup()
{
  wtv020sd16p.setVolume(7);
}

Fehlermeldung:
Arduino: 1.8.8 (Windows 10), Board: "Arduino/Genuino Uno"

...\ccdVKZYW.ltrans0.ltrans.o: In function `main':

...\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:46: undefined 
reference to `loop'

collect2.exe: error: ld returned 1 exit status

exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Uno.

Im Arduino Forum war beschrieben,das die 2. Variante gelaufen ist.
https://forum.arduino.cc/index.php?topic=468617.0

Deshalb hab ich das kopiert...
Verdrahtung nochmal geprüft, sollte stimmen. Zwar verstehe ich nicht 
warum die Start/Stop Taste nicht belegt wird...

Vielleicht ist es auch ein ganz einfacher fehler das ich beim Einbinden 
twas falsch gemacht, wie schon gesagt Neuling, bis auf die 4 Grundkurse 
hat ich noch nichts mit Arduino gemacht.

Autor: Harald A. (embedded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast vermutlich die verlinkte Lib nicht eingebunden. Das Verzeichnis 
aus dem ZIP muss in den Installationsordner Arduino, Unterordner 
Libraries. Dann Arduino neu starten und du findest das Beispiel schon 
direkt unter Datei/Beispiele.

>Aber irgendwo kann man den Programmer doch verwenden, oder?

Ja, aber nicht für Arduino.

Autor: Harald A. (embedded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum fängst Du für jedes Unterproblem immer einen neuen Thread an?

Hier gelöst:
Beitrag "Re: WTV020 Start - Stop - ohne AVR"

Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Doch, ist eingetragen bei den "Beigetragenen Bibliotheken"

Wenn ich aber in den Biblotheksverwalter gehe finde ich keinen Eintrag 
der mit "WTV" beginnt

Hab noch einen neuen Thread aufgemacht zu dem Thema oder ist das nicht 
so sinnvoll?

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...weil es ja jetzt nicht mehr um "ohne AVR" geht.
Du meinst, ich sollte im alten weiterschreiben?
Gut dann lösche ich das wieder...

Geht nix löschen, hab wohl keine Berechtigung

: Bearbeitet durch User
Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Z. schrieb:
> Doch, ist eingetragen bei den "Beigetragenen Bibliotheken"

Hast du unter Beispiele einen Eintrag mit WTV...? Falls nicht ist die 
Bibliothek nicht richtig eingebunden. Ich habe das gestern auch kurz 
gemacht, allerdings durch direktes Reinkopieren ins das Verzeichnis. Hat 
auf Anhieb compiliert.

Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nein, in den Beispielen sehe ich es nicht.
Hatte in die Libraries auch direkt kopiert.
Im Ordner Examples sind aber nur fertige *.ino drin...

In den Bibliotheken sind die Examples mit drin, in der von mir benutzten 
sind keine drin. Muss mir vielleicht eine andere Bibliothek laden.

Hab jetzt mal mit einem DHT probiert und dabei ist mir das aufgefallen.
Hab die DHT kopiert und auch in den beispielen ist jetzt ein DHT 
Eintrag.
Mit dem DHT klappe es, also liegt es am fehlenden Beispiel in meiner Lib
Bin begeistert...

Welche WTV020 Lib hast Du benutzt?

: Bearbeitet durch User
Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Beim hochladen der WTV Beispieldatei kommt wieder die gleiche 
Fehlermeldung
"exit status 1
Wtv020sd16p.h: No such file or directory"

Benutze ich den Sketch kommt die Fehlermeldung beim Hochladen nicht,
dort ist der Eintrag

"#include <WTV020SD16P.h>"

groß geschrieben, in der Beispieldatei nicht.

Ok, sketch seperat erstellt und 8 ad4 Titel drauf, dabei den vormals 20 
Titel Eintrag auf 8 reduziert,
==============
Serial.println("Playing from 0 to 8...");

    // Play the AD4-files from "0000.AD4" to "0020.AD4".
    // All of my files have/had a duration below 5 seconds.
    // ATTENTION: Files have to start with number "0000" and
    // must be continuously!
    for(int i = 0; i < 9; i++)
==============
ich höre aber nichts :-(
ohne den Arduino funktioniert es mit dem abspielen...
Wenn ich den Reset Pin am Modul abklemme funktioniert per Hand

Ich habe laut einem Schaltbild:
Modul Pin - Arduino
    1         4
    7         5
   10         6
   15         7

Offenbar muss ich anderes anschließen:
Connections:
Module pin 1 --> arduino pin 2 (reset)
module pin 7 --> arduino pin 3 (clock)
module pin 10 --> arduino pin 4 (data)
module pin 15 --> arduino pin 5 (busy)
==============

Sound geht jetzt, springt nn zum nächsten Titel...

: Bearbeitet durch User
Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nun muss nur noch ein Taster das ganze auslösen und zusätzlich ein 
Ausgang für den LED Blitzer :-(

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Library geht von einem wtv020 Modul aus, dass für "two line serial 
mode" konfiguriert mode, also auf Befehle von einem Steuergerät wie 
deinem arduino wartet.

Mit großer Wahrscheinlichkeit jedoch hast du ein Modul erwischt, dass im 
"mp3 player mode" konfiguriert wurde. Dann sind Eingänge wie clock oder 
data anders belegt (z.b. ändern Sie die Lautstärke, wenn du dort einen 
Taster anschließt).

Das hat zwar alles überhaupt nichts mit dem Problem zu tun, dass die 
Bibliothek noch nicht eingebunden wird. Wenn du dies jedoch bisher nicht 
zweifelsfrei abgeklärt hast, würde ich dir empfehlen zuerst den Modus 
deines Moduls herauszufinden, bevor du weiter mit einer Library kämpfst, 
die später gar nicht anwendbar ist. Du findest alles im entsprechenden 
Datenblatt (letzte Seiten mit den schaltungsbeispielen für die 
unterschiedlichen Modi).

Ingo

Autor: carlo1309 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit der lib konnte ich klären, ich hatte es weiter oben beschrieben.
Am Ende lag es auch noch an den falschen Verbindungen zum Arduino...

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na also, geht doch voran! Was ich dir noch wärmstens empfehlen kann, 
wäre ein Logic Analyzer. Die sog. Saleae Clones gibt es für <10€, mit 
der freien Software Sigrok kann man sehr einfach Signalverläufe von bis 
zu 8 Signalen verfolgen, auch über längere Zeiträume. Das hilft bei der 
Fehlersuche ungemein, nicht nur für dieses Projekt. Dabei können auch 
Bussysteme wie Seriell, SPI, I2C usw. decodiert werden und die Inhalte 
in „Klartext“ ausgegeben werden.

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja stimmt,...die Clone vom Analyser funktionieren auch ganz gut?
Würde bei Ali mal schauen.

Für die Schaltung muss nun noch der Taster rein, und die Schleife für 
das Abspielen umgestrickt werden, damit auch nur ein Titel spielt und 
beim nächsten Drücken der Taste der nächste.
Die LED die dann "blitzen" soll mass ebenfalls noch rein, aber sie soll 
nur 30-60 sec lang blitzen. Geht diese Länge überhaupt zu realisieren?

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die vorgestellten Beispiele finde ich für meinen Einsatz viel zu 
kompliziert.
Warum kann ich nicht einfach sagen:

wenn Taste start gedrückt spiele song 1 (signal wird an Play Pin9 
geschickt
nach 60 sec nochmal signal in Pin9, damit der Song wieder anhält, falls 
er zu lang ist
dann signal an next, damit der nächste Titel aufgerufen wird

Das ganze dann in einer Schleife von 10 Titeln, am ende nochmal ein 
Signal an reset und fertig das ganze

Hab hier einen code mit Taster offenbar: (hier aus dem Forum)
==================
#include <WTV020SD16P.h>

const int resetPin= 2;
const int clockPin= 3;
const int dataPin= 4;
const int busyPin= 5;
int buttonPin = 12;
int button= 0;

Wtv020sd16p wtv020sd16p (resetPin, clockPin, dataPin, busyPin);

 void setup()
 {
wtv020sd16p.reset ();
 pinMode (buttonPin, INPUT);
 }

 void loop()
 {
 button = digitalRead (buttonPin);
 if (button == HIGH)
 {
wtv020sd16p.playVoice (4[/code]);
 delay(2000);
 }
 }]
===================

Die 4.Zeile von unten: wtv020sd16p.playVoice (4[/code]);

wird mit Fehler angemeckert:
expected primary-expression before '/' token

Was fehlt indem sketch

: Bearbeitet durch User
Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab die Fehler zwar beseitigen können, der sketch scheint aber nicht 
geeignet zu sein. Ob es jetzt das macht wofür es gedacht war kann ich 
nicht sagen.

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nach ewigen strg-c und strg-v komme ich nicht weiter.
Wenn ich das Modul nur mit den "play" und "next" Tasten steuern will 
wird nach "next" gleich der nächste Titel abgespielt.
2x drücken der play taste hält den Titel an, aber wenn ich jetzt "next" 
auslöse geht der nächste ong weiter.

Mit einer loop funktioniert es zwar, aber da werden ja alle Titel 
hintereinander abgespielt.
Ich weis nicht wie ich die Schleife im sketch und mit einem Taster 
unterbrechen soll, auch nicht wie ich das ganze per Taste starte...bin 
so langsam am Ende...
Hier mal meine Zusammenstückelungen
==========================
// playPin => pin  9 WTV
// nextPin => pin 13 WTV
// prevPin => pin 12 WTV
// PIN_WTV_RESET => pin  1 WTV
// PIN_WTV_DATA  => pin  6 WTV
// PIN_WTV_BUSY  => pin 15 WTV

#include <WTV020SD16P.h>
#define DELAY_RESET 1000

// nur reset und busy verwendet, mass aber alle deklarieren

#define PIN_WTV_RESET 2
#define PIN_WTV_CLOCK 3
#define PIN_WTV_DATA  4
#define PIN_WTV_BUSY  5


// Create an object of the "driver".
Wtv020sd16p wtv020sd16p(PIN_WTV_RESET, PIN_WTV_CLOCK, PIN_WTV_DATA, 
PIN_WTV_BUSY);

    int playPin = 12;
    int nextPin = 13;

void setup() {
    pinMode(playPin, OUTPUT);
    pinMode(nextPin, OUTPUT);
    Serial.begin(9600);
    wtv020sd16p.reset();
    }

void loop()
    {
//    for(int i = 0; i < 9; i++)
    {
    digitalWrite(playPin, HIGH);
    delay(500);
//  digitalWrite(nextPin, HIGH);
    delay(500);
    wtv020sd16p.playVoice(0);
//  digitalWrite(playPin, LOW);
    wtv020sd16p.stopVoice();
    delay(15000);
    digitalWrite(playPin, LOW);
    delay(500);
    wtv020sd16p.playVoice(1);
//  digitalWrite(playPin, LOW);
    wtv020sd16p.stopVoice();
    delay(15000);
    wtv020sd16p.playVoice(4);
//  digitalWrite(playPin, LOW);
    wtv020sd16p.stopVoice();
    delay(15000);

//  wtv020sd16p.stopVoice();
  digitalWrite(nextPin, LOW);
  delay(100);
//  wtv020sd16p.stopVoice();

    }
}

=============
ich rufe Titel 0, 1 und 4 auf

: Bearbeitet durch User
Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist hier ein wenig, dass ein paar Details fehlen:

- Welches Modul hast du genau? Es gibt da ja nach Aussage verschiedene 
Ausführungen. Wie funktioniert dein Modul. Was muss man ansteuern?

- Man müsste aus deinem Schaltplan und dem Text Reverse Engineering 
machen, um herauszufinden was du genau machen willst. Das wird kaum 
jemand machen. Dir ist klar, was du willst, dem Leser nicht.

- Wenn du mehrere Vorgänge parallel hast (Taster abfragen, Signal State 
Machine und LED blinken) bietet sich das in einzelnen Unterfunktionen 
an, die jeweils eine eigene State Machine abbilden. Das geht mit Hilfe 
von switch/case Stukturen. Klingt kompliziert, ist es aber nicht. Jedes 
Unterprogramm wird so geschrieben, dass es Abfragen macht um ggf. in 
einem neuen State zu springen. Jedes Unterprogramm wird schnellstmöglich 
wieder verlassen, damit alle anderen Unterprogramme im gleichen Zeittakt 
aufgerufen werden können.

Also du kommst (hier) am besten weiter, wenn du etwas mehr beschreibst. 
Vielleicht kannst du eine Signalabfolge darstellen/skizzieren.

Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Beschreibung

Eine Klingeltaste ist die Gesamtsteuerung

Taste gedrückt = kurzer Impuls Start 1.song
 (das WTV Modul braucht ein LOW zum auslösen der jeweiligen Funktionen)

und
LED = High, blinkend
Länge des Song: delay 30sec
nach Ablauf springt zum nächsten Titel

und wartet auf erneute Eingabe.

Taste gedrückt = kurzer Impuls Start 2.song
und
LED = High, blinkend
Länge des Song: delay 30sec
nach Ablauf springt zum nächsten Titel
und wartet auf erneute Eingabe.

↑ Das hier oben soll die loop sein
=================
Bei der direkten Steuerung des Modul wird beim drücken der „next“ Taste 
sofort der nächste song abgespielt, den reset Eingang (WTV020) kann ich 
hier nicht verwenden, weil dann immer nur der 1.song abgespielt wird.
Die beiden Befehle:
wtv020sd16p.playVoice(1);
wtv020sd16p.stopVoice();

könnte ich verwenden, es gibt keinen „next“ Befehl für das Modul

In der Datei WTV020SD16P.cpp aus dem lib Verzeichnis ist noch folgendes 
beschrieben/definiert

void Wtv020sd16p::playVoice(int voiceNumber){
sendCommand(voiceNumber);

Also könnte man durch Aufruf der voiceNumber den nächsten Titel aufrufen 
aber erst abspielen wenn Taste nochmal gedrückt wurde.
Insgesamt wollte ich 10 Titel verwenden, danach wird wieder der 1.song 
abgespielt

Ich verwende das WTV020 M01 – spielt *.ad4 das WTV020sd16 Modul spielt 
*.mp3. Das Dateiformat der songs muss 0000.ad4 0001.ad4 usw. sein.
Der Rest ist gleich.
Ich weis nicht wie ich es beschreiben soll: entweder ich steuere das 
Modul rein Hardware technisch, also so, wie es meine Schaltung ganz am 
Anfang machen sollte, dabei werden die Arduino Pin als Ausgänge 
definiert und schalten dann das Modul oder reine Softwaresteuerung durch 
Arduino.
Aber das Problem ist wie schon benannt, das Betätigen der Next Taste am 
WTV spielt den neuen Titel sofort ab., deswegen scheint die Steuerung 
über die 4 Anschlüsse 1,7,10,15 die bessere Variante
Einziger Input ist ein Taster, und zusatzlicher output ist eine LED

Im Gesamtschaltbild ist ein SD20 (20Pin) Modul, da sind die Anschlüsse 
anders. Richtiger Anschlüss siehe Anhang

: Bearbeitet durch User
Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorbildich! Damit kann man arbeiten. Ich werde versuchen, heute Abend 
mal einen ersten Vorschlag einzustellen.

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Doch nicht ganz klar, dein Anschlussbild "falsch_hier_richtig" stiftet 
Verwirrung.

Schließe bitte die Pins wie folgt an
WTV Pin  1 an Arduino Pin 4
WTV Pin  7 an Arduino Pin 5
WTV Pin 10 an Arduino Pin 6
WTV Pin 15 an Arduino Pin 7
Sonst keine weiteren Digitalsignale, nur noch Power und GND

Das Programm wie folgt testen, damit sollte das Programm je 5sec die 
Sounds in der Reihenfolge 1, 4, 2, 3 spielen, ohne Wenn und Aber.
Geht das soweit? Dann machen wir weiter.

Deine obigen Ansätze sehen so aus, als ob du serielle Modulansteuerung 
per SPI und Tastenansteuerung miteinander vermischen willst. Das geht 
natürlich nicht. Der SPI-Treiber auf dem Arduino soll ja dafür sorgen, 
dass du jeden Sound gezielt starten und stoppen kannst. Also nicht mehr 
mit NEXT oder START rumspielen...


#include <WTV020SD16P.h>

#define PIN_WTV_RESET 4
#define PIN_WTV_CLOCK 5
#define PIN_WTV_DATA  6
#define PIN_WTV_BUSY  7


// Create an object of the "driver".
Wtv020sd16p wtv020sd16p(PIN_WTV_RESET, PIN_WTV_CLOCK, PIN_WTV_DATA,
PIN_WTV_BUSY);

void setup()
{
  wtv020sd16p.reset();
}

void loop()
{
  wtv020sd16p.playVoice(1);
  delay(5000);
  wtv020sd16p.playVoice(4);
  delay(5000);
  wtv020sd16p.playVoice(2);
  delay(5000);
  wtv020sd16p.playVoice(3);
  delay(5000);
}

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ändere die Loop-Funktion bitte wie folgt, da das obige Kommando auf 
Abschluss der Ausgabe wartet. Wir wollen nur starten.

void loop()
{
  wtv020sd16p.asyncPlayVoice(1);
  delay(5000);
  wtv020sd16p.asyncPlayVoice(4);
  delay(5000);
  wtv020sd16p.asyncPlayVoice(2);
  delay(5000);
  wtv020sd16p.asyncPlayVoice(3);
  delay(5000);
  wtv020sd16p.stopVoice();
  delay(5000);
}

Jetzt sollte es so sein, dass jeder Sound exakt 5sec gespielt wird, 
Inder Reihenfolge 1, 4, 2, 3. Dann sollte 5sec Pause folgen und dann 
sollte das Spiel von vorne losgehen.

Prüfst Du das mal?

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, hab ich diesmal gleich richtig angeschlossen,

Im 1. Beispiel werden die Titel jeweils bis zum Ende gespielt,
im letzten Beispiel jeweils für 5sec, wie Du beschrieben hast.
und von vorn wieder los...

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr gut, morgen geht es weiter!

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich probiere mich seit paar Tagen an den sketches,
So richtig steige ich nicht durch...

Eine LED soll 1 sec blinken für insgesamt 6sec, nachdem ein Taster kurz 
gedrückt wurde. Wo muss ich die 1 sec blinken einbauen?

=====================
int LED=6;
int taster=7;
int tasterstatus=0;

void setup()
{
pinMode(LED, OUTPUT); //Der Pin mit der LED (Pin 6) ist jetzt ein 
Ausgang.
pinMode(taster, INPUT); //Pin mit dem Taster (Pin 7) ist jetzt ein 
Eingang.
// INPUT_PULLUP ersetzt den Widerstand
}
void loop()
{
tasterstatus=digitalRead(taster);  //Hier wird der Pin7 ausgelesen

if (tasterstatus == LOW)  // Wenn der taster gedrückt ist (Das
//Spannungssignal ist low)..
{   //Programmabschnitt des IF-Befehls öffnen.
digitalWrite(LED, HIGH);
delay(6000);
digitalWrite(LED, LOW);
}
else
{
digitalWrite(LED, LOW);   // ...soll die LED aus sein.
}
}

Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der Logikanylyser ist auch angekommen.

Bei Verwendung des sketchs:

//////////////////////////////////////////////////////
//
// LED per PWM nach oben und unten dimmen
//
//////////////////////////////////////////////////////

int REDLED =     9;    // hier befindet sich eine LED
int brightness = 0;    // mit dieser Helligkeit
int fadeAmount = 5;    // Grad der Helligkeitsänderung


void setup() {
  pinMode(REDLED, OUTPUT);
}

void loop() {
  // Helligkeit für LED setzen:
  analogWrite(REDLED, brightness);

  // heller oder dunkler je nach Vorzeichen von fadeAmount:
  brightness = brightness + fadeAmount;

  // Am Rand des Helligkeitsspektrums kehren
  // wir die Veränderung der Helligkeit um
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }
  delay(20); // etwas Pause lassen
}
===========
bring er einen framing error, anylysiert wird pin9 mit 4MS/s andere 
Einstellung meckert "Saleae Logic" an.
Die Analyzers Einstellung ist: Async Serial

Autor: Harald A. (embedded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein Programmvorschlag für dein eigentliches Problem:

Es ist nicht nach allen Regeln der Kunst, sollte aber einen Eindruck 
vermitteln, wie man parallele Tätigkeiten in ein Programmablauf bekommt.

#include <Wtv020sd16p.h>

#define LED_OUT 12
#define TASTER  13

#define TIME_LED_FLASH 20    // Blinkgeschwindigkeit in 10ms Schritten
#define TIME_SOUND     3000  // Soundzeit in 10ms Schritten


int resetPin = 4;  // The pin number of the reset pin.
int clockPin = 5;  // The pin number of the clock pin.
int dataPin  = 6;  // The pin number of the data pin.
int busyPin  = 7;  // The pin number of the busy pin.

Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);

// 
------------------------------------------------------------------------ 
----------------------------------

void setup()
{
  pinMode (LED_OUT, OUTPUT);
  pinMode (TASTER,  INPUT_PULLUP);    // Pullup für Optokoppler/Taster 
Eingang aktivieren
  wtv020sd16p.reset();
}


// 
------------------------------------------------------------------------ 
----------------------------------
// "led_flasher" wird im 10ms Takt aufgerufen, per "mode" lässt sich 
Zustand 0:AUS oder 1:BLINKEN festlegen
void led_flasher (uint8_t mode)
{
  static uint8_t counter, state;

  if (mode == 0)
  {
    state = 0;
    counter = 0;                              // Zaehler zurücksetzen
    digitalWrite(LED_OUT, 0);                 // LED aus
  }
  else
  {
    counter++;
    if (counter >= TIME_LED_FLASH)             // Flashzeit hochzaehlen
    {
      counter = 0;
      state ^= 1;                              // nach abgelaufener Zeit 
Zähler rücksetzen und Ausgang toggle
      digitalWrite(LED_OUT, state);
    }
  }
}

// 
------------------------------------------------------------------------ 
----------------------------------
// "handler" wird alle 10ms aufgerufen, hier wird die Taste ausgewertet, 
Sounds gestartet und die LED bedient

void handler (void)
{
  static uint8_t state;
  static uint16_t counter;

  switch (state)
  {
    case 0 :                                 // Warten auf Taster
    default :
    {
      counter = 0;
      if (digitalRead(TASTER) == 0)
      {
        wtv020sd16p.asyncPlayVoice(1);       // Wenn Tastendruck erkannt 
Sound 1 starten und nächster Schritt
        state = 1;
      }
    }
    break;

    case 1 :                                 // Sound spielt, LED 
blinken lassen
    {
      led_flasher(1);                        // LED blinkt
      counter++;
      if (counter >= TIME_SOUND)             // Soundzeit abgelaufen
      {
        wtv020sd16p.stopVoice();             // Soundausgabe stoppen
        led_flasher(0);                      // LED aus
        state++;                             // nächster Step
      }
    }
    break;

    case 2 :
    {
      counter = 0;
      if (digitalRead(TASTER) == 0)           // wieder warten auf 
Tastendruck
      {
        wtv020sd16p.asyncPlayVoice(2);        // Sound 2 starten
        state++;
      }
    }
    break;

    case 3 :
    {
      led_flasher(1);                         // wieder LED blinken 
lassen
      counter++;
      if (counter >= TIME_SOUND)
      {
        wtv020sd16p.stopVoice();               // nach Zeit Sound stop
        led_flasher(0);
        state = 0;                             // wieder zu Schritt 0
      }
    }
    break;
  }
}


// 
------------------------------------------------------------------------ 
----------------------------------

void loop()
{
  static uint32_t timer_compare;

  if (millis() >= (timer_compare+10))    // 10ms vergangen?
  {
    timer_compare = millis();            // neuen Zeitpunkt merken
    handler();                           // handler() wird alle 10ms 1x 
aufgerufen
  }
}

Autor: Harald A. (embedded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bzgl. des Logic-Analyzers. Du stellst einen Decoder "Async" für Channel 
0 ein, das bedeutet, man möchte eine serielle UART-Schnittstelle an 
Channel 0 decodieren. Darum geht es in diesem Fall aber nicht. Wenn Du 
nur reine Digitalsignale anaylsieren willst brauchst du keinen Decoder.

In diesem Projekt könntest Du schauen, wie die Befehle per SPI an den 
WTV übertragen werden. Zu diesem Zweck brauchst Du hier zwei Kanäle, CLK 
an Pin 7 und DATA an Pin 10. Der zuständige Decoder muss dann auf SPI 
eingestellt werden.
Beschäftige dich etwas damit und schaue vielleicht ein paar Videos oder 
sonstige Tutorials, dann bekommst du schnell mehr Klarheit.

: Bearbeitet durch User
Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das funktioniert perfekt, danke.
Wie hätte ich darauf kommen sollen?

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum ist uint8_t und uint16_t benutzt?
Hätte für LED und Taste uint8_t gereicht oder hat das einen anderen 
Hintergrund?

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Z. schrieb:
> Das funktioniert perfekt, danke.
Gern geschehen.

> Wie hätte ich darauf kommen sollen?
Ohne Programmiererfahrung schwierig. Aber vielleicht bist du jetzt ja 
angefixt und machst einfach noch mehr mit Arduino und Co.
Starte mit den einfachen Sachen und lerne dabei, Schritt für Schritt

Bernd Z. schrieb:
> warum ist uint8_t und uint16_t benutzt?
Man soll möglichst immer die native Datenbreite des Prozessors nehmen, 
die kann er am besten verarbeiten. „state“ kann nur maximal 3 annehmen, 
da reicht die native Datenbreite des AVRs mit 8bit vollkommen. Für 
„counter“ kann der Wert bis zu 3000 annehmen, da reicht 8bit nicht. Also 
nimmt man 16bit.
Bei einem ARM Prozessor mit 32bit kann man in aller Ruhe alles mit 32bit 
machen, der Prozessor mag das lieber als 8bit irgendwo herauszulösen. 
Mit 32bit stößt man seltener an Zahlengrenzen. 32bit würden hingegen 
einen AVR schon mehr beschäftigen. Schöner Leistungskiller für beide 
Prozessoren sind Fließkommazahlen, wenn die CPU nicht eine extra Einheit 
dafür hat.

In dieser Anwendung ist das aber alles total egal, auch der AVR 
langweilt, sich hier zu ca. 99%.

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens sieht dein neues Bild vom Logic Analyzer noch nicht richtig 
aus. Ich würde erwarten, dass man bei CLOCK die 16(?) Bits des 
Steuerwortes sieht, an DATA die zugehörigen Daten.

CLOCK ist an Pin 7 des WTV, DATA an Pin 10.

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Z. schrieb:
> Wie hätte ich darauf kommen sollen?

Bin den Thread gerade nochmal durchgegangen, ich war bei dem Vorschlag 
der Verwendung eines Arduinos etwas zu optimistisch.
Das Starten und Stoppen von Sounds ist banal einfach und wäre wirklich 
nur ein Wenigzeiler geworden. Etwas kompliziert wurde es durch die 
Forderung einer parallel blinkenden LED. Wenn ich drüber nachdenke wäre 
es vielleicht im ersten Ansatz noch einfacher...

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der folgende Ansatz bringt das gleiche Ergebnis und ist vielleicht für 
den Anfänger leichter zu verstehen. Dafür bietet es aber kaum 
Möglichkeiten für weitere parallele Aktionen. Außerdem weißt Du jetzt 
schon, wie eine state machine funktioniert.

#include <Wtv020sd16p.h>

#define LED_OUT 12
#define TASTER  13

#define TIME_LED_FLASH 20    // Blinkgeschwindigkeit in 10ms Schritten
#define TIME_SOUND     3000  // Soundzeit in 10ms Schritten


int resetPin = 4;  // The pin number of the reset pin.
int clockPin = 5;  // The pin number of the clock pin.
int dataPin  = 6;  // The pin number of the data pin.
int busyPin  = 7;  // The pin number of the busy pin.

Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);

// 
------------------------------------------------------------------------ 
----------------------------------

void setup()
{
  pinMode (LED_OUT, OUTPUT);
  pinMode (TASTER,  INPUT_PULLUP);    // Pullup für Optokoppler/Taster 
Eingang aktivieren
  wtv020sd16p.reset();
}


void loop()
{
  uint8_t x, y;

  for (x=1; x<=2; x++)
  {
    while (digitalRead(TASTER));                          // Warten auf 
Taster=0
    wtv020sd16p.asyncPlayVoice(x);                        // Sound x 
starten
    for (y=0; y<(TIME_SOUND/TIME_LED_FLASH); y++)         // Schleife 
zum LED blinken
    {
       digitalWrite(LED_OUT, !digitalRead(LED_OUT));      // alle 
"TIME_LED_FLASH" ms den Ausgang toggeln
       delay(TIME_LED_FLASH);
    }
    wtv020sd16p.stopVoice();                              // Ausgabe 
beenden
    digitalWrite(LED_OUT, 0);                             // LED 
loeschen
  }
}

Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Harald schrieb:
> Übrigens sieht dein neues Bild vom Logic Analyzer noch nicht richtig
> aus. Ich würde erwarten, dass man bei CLOCK die 16(?) Bits des
> Steuerwortes sieht, an DATA die zugehörigen Daten.

Ja, hast Recht, vielleicht habe ich auch nicht richtig gezoomt...
und nur den "blauen" Teil gesehen.

: Bearbeitet durch User
Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald schrieb:
> Der folgende Ansatz bringt das gleiche Ergebnis und ist vielleicht für
> den Anfänger leichter zu verstehen.

Bei "uint" hatte ich nicht verstanden, warum 8bit nicht reichen, aber 
jetzt verstanden.

Ja, ein bischen einfacher schon.
▲ Funktioniert genauso..... für mich einfacher die Anzahl der Titel zu 
erhöhen :-)

Bei der ersteren Variante suchte ich vergeblich nach einer Möglichkeit 
das Tastverhältnis der LED zu ändern. "state ^= 1;" ?
Ich nehme mal an Uno kennt Standard=50% deshalb fehlt das, richtig?
Im 2. zwar gefunden "digitalWrite(LED_OUT, !digitalRead(LED_OUT)" ist 
auch die 50% Einstellung : out=1 out=0 - oder?

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"if....state" verstehe ich so, das ich z.B. 1x klick Taste 1.LED an, 2x 
klick 2.LED an, also ein CD4017.

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine letzte Frage:
(TIME_SOUND/TIME_LED_FLASH) ist tatsächlich eine Division?
Die Variablen zu nutzen, ist natürlich viel intellgenter, als eine Zahl 
einzutragen.

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Z. schrieb:
> "if....state" verstehe ich so, das ich z.B. 1x klick Taste 1.LED
> an, 2x
> klick 2.LED an, also ein CD4017.

Nur ist die Variable dann das PIN am Uno :-(
Da könnte ich ein Schieberegister nehmen....dann bleibt es seriell

: Bearbeitet durch User
Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Z. schrieb:
> Noch eine letzte Frage:
> (TIME_SOUND/TIME_LED_FLASH) ist tatsächlich eine Division?
> Die Variablen zu nutzen, ist natürlich viel intellgenter, als eine Zahl
> einzutragen.

Das ist eine Division, allerdings schon zu Compilierzeit. D.h. im 
übertragenen Programm ist dann das Ergebnis der Division der beiden 
Konstanten verwendet, es wird nicht zur Laufzeit dividiert.

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Z. schrieb:
> Bernd Z. schrieb:
>> "if....state" verstehe ich so, das ich z.B. 1x klick Taste 1.LED
>> an, 2x
>> klick 2.LED an, also ein CD4017.
>
> Nur ist die Variable dann das PIN am Uno :-(
> Da könnte ich ein Schieberegister nehmen....dann bleibt es seriell

Ich kann dir leider nicht folgen, führe mal etwas aus was du möchtest.

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wäre die Änderung mit variablem LED Tastverhältnis


#define TIME_LED_ON      20  // LED ein Zeit in ms
#define TIME_LED_OFF     80  // LED aus Zeit in ms
#define TIME_SOUND     3000  // Soundzeit in 10ms Schritten


  for (y=0; y<(TIME_SOUND/(TIME_LED_ON+TIME_LED_OFF); y++)
  {
     digitalWrite(LED_OUT, 1);
     delay(TIME_LED_ON);
     digitalWrite(LED_OUT, 0);
     delay(TIME_LED_OFF);
  }

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur

define TIME_LED_ON        2  // LED ein Zeit in 10ms
#define TIME_LED_OFF      8  // LED aus Zeit in 10ms
#define TIME_SOUND     3000  // Soundzeit in 10ms Schritten


  for (y=0; y<(TIME_SOUND/(TIME_LED_ON+TIME_LED_OFF); y++)
  {
     digitalWrite(LED_OUT, 1);
     delay(TIME_LED_ON*10);
     digitalWrite(LED_OUT, 0);
     delay(TIME_LED_OFF*10);
  }

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das war eine Überlegung wie "if...state" funktioniert.
Ich bezog mich auf Deinen 1.code

=========================
if (mode == 0)
  {
    state = 0;
    counter = 0;
    digitalWrite(LED_OUT, 0);
  }
  else
  {
    counter++;
    if (counter >= TIME_LED_FLASH)
    {
      counter = 0;
      state ^= 1;

      digitalWrite(LED_OUT, state);
=========================

war natürlich nicht korrekt meine Schreibweise "if...state"

: Bearbeitet durch User
Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ne, das war mir schon klar. Ich bezog mich auf:


>> klick 2.LED an, also ein CD4017.
>> Nur ist die Variable dann das PIN am Uno :-(
>> Da könnte ich ein Schieberegister nehmen

Autor: Carlo0109 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich das mit dem uno machen würde, müsste ich an je einen Ausgang 
eine LED hängen, die Ausgabe wäre parallel, ein 4017 würde am Eingang 
seriell arbeiten und jeweils seine Ausgänge schalten.

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Carlo0109 schrieb:
> Wenn ich das mit dem uno machen würde, müsste ich an je einen
> Ausgang
> eine LED hängen, die Ausgabe wäre parallel, ein 4017 würde am Eingang
> seriell arbeiten und jeweils seine Ausgänge schalten.

Ich verstehe leider immer noch nicht, worauf Du hinaus möchtest. Wir 
haben ein Programm für den WTV gebaut, du sprichst von 4017, LEDs und 
paralleler Ausgabe. Grübel...

Autor: Carlo0109 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte den Gedanken wofür man die Befehle noch verwenden könnte, hat 
nix mit WTV zu tun...

Autor: Carlo0109 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also nicht mehr drüber nachdenken

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach all den Zeilen würde ich gerne als Resümee noch wissen, ob Dir die 
Lösung per Software/Arduino gefallen hat oder ob du es doch lieber in 
Hardware umgesetzt hättest.

Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja, natürlich, hätte mich schon noch gemeldet, musste paar dringende 
Dinge erledigen.
Ich möchte das nicht mehr in Hardware umsetzen, die Softwarelösung ist 
einfach genial!
Bin schon am zusammensuchen der anderen Bauteile, ich hatte ganz weit 
vorher eine Lösung mit einem U880 :-) da hat aber der benutzer einen 
Kurzschluß verursacht und ich habe keinen Schaltplan mehr. Einen EProm 
hatte ich noch uns eine pcb.
Seit mehreren Jahren suchte ich einen Ersatz dafür, weil das was es auf 
dem Markt gibt, mir nicht gefällt.
Ich bin total inspiriert, auch andere Sachen zu machen, wie Du es schon 
eingangs sagtest, einmal Blut geleckt....

Die Hardwarelösung hätte so ausgesehen: allein die zu verlötenden 
Drähte...
der WTV fehlt da noch..

Bin gerade beim Einrichten des Nano, muss den Treiber noch suchen, aber 
Du hattest oben ja schon geschrieben worauf ich achten muss.
Zwischendurch hab ich noch paar Sensoren etc. gekauft:-)

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So geht erstmal mit dem Nano, aber das Blamken strtet sofort der Sound 
viel später und er springt zum nächsten Titel.
Aktuell hält er nicht mehr an.
Muss geute abend nochmal ne Fehlersuche machen.

Autor: Bernd Z. (carlo1309)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Old bootloader" löst das Problem nicht.

Autor: Bernd Z. (carlo1309)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
In der Verdrahtung hab ich keine Fehler gefunden.
Aufnahme vom Analyser.

Hab gerade mal nachgesehen, mein Uno hat auch einen CH340G drauf,
auf dem Nano steht nichts drauf, auf dem serial Chip.

: Bearbeitet durch User
Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Z. schrieb:
> steht nichts drauf, auf dem serial Chip.

SO16 dürfte CH340 sein, die FTDI gibt es in vielen anderen Bauformen 
aber nicht in SO16. Ansonsten VID/PID im Geräte-Manager unter 
Eigenschaften/Details/Hardware-IDs nachsehen und googeln.

Autor: Carlo0109 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SOT16 hat er auch, hab nochmal einen neuen Nano bestellt, bei einem 
anderen Anbieter. Sollte Montag ankommen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.