Hi,
hab gerade ein kleines Problem mit meinem Arduino UNO SMD.
Ich hab einen kleinen Frequenzgenerator mit Nokia 5110 Display und AD9850 aufgebaut. Dazu hängt noch ein Drehencoder für die Bedienung dran. Am PIN5 kann ich dann noch eine Frequenz messen.
Wenn ich Software flashe, oder die COM-Schnittstelle aufmache, dann startet der Arduino immer mit seinem Programm.
Aber wenn ich das Board über USB anstecke, dann ist es reine Glücksache, ob er losläuft oder nicht. Erst nach einem Reset fängt er definitv an zu starten.
Erst dacht ich, daß die Spannungsversorgung über USB einbricht. Dagegen spricht: Windows sagt, daß am USB-port nur 100mA abgenommen werden. (Ja, ich weiss das ist ein Schätzeisen, aber besser als nichts). Egal, ob ich das LCD oder den AD9850 abstecke, das Phänomen bleibt.
Ich hab auch schon mal eine Zeit in der Setup eingatragen, um da zeitlich etwas zu entzerren. hilft nix. Wahrscheinlich fängt er gar nicht an zu starten.
Hat da jemand eine Idee????
Ich häng mal kurz das wichtigste aus meinem Code dran:
#include <EF_AD9850.h>
#include <FreqCounter.h>
#include <LCD5110_Basic.h>
// ---------------------- LCD STUFF ---------------------------
//LCD5110 myGLCD (SCK, MOSI, DC, RST, CS)
LCD5110 myGLCD(14,15,16,18,17);
// ---------------------- ENCODER STUFF ---------------------------
// usually the rotary encoders three pins have the ground pin in the middle
enum PinAssignments {
encoderPinA = 2, // rigth
encoderPinB = 3, // left
clearButton = 4 // Druckknopf
};
volatile unsigned long encoderPos = 0; // a counter for the dial
unsigned long lastReportedPos = 1; // change management
static boolean rotating=false; // debounce management
unsigned long faktor = 1;
// interrupt service routine vars
boolean A_set = false;
boolean B_set = false;
// ---------------------- ADS9850 STUFF ---------------------------
// BitData - D11, CLK - D9, FQUP - D10, REST - D12
EF_AD9850 AD9850(9, 10, 12, 11);
//---------------------------- SETUP ------------------------------
void setup()
{
delay (3000);
Serial.begin(57600); // connect to the serial port
Serial.println ("Programmstart");
myGLCD.InitLCD();
pinMode(encoderPinA, INPUT);
pinMode(encoderPinB, INPUT);
pinMode(clearButton, INPUT);
// turn on pullup resistors
digitalWrite(encoderPinA, HIGH);
digitalWrite(encoderPinB, HIGH);
digitalWrite(clearButton, HIGH);
// encoder pin on interrupt 0 (pin 2)
attachInterrupt(0, doEncoderA, CHANGE);
// encoder pin on interrupt 1 (pin 3)
attachInterrupt(1, doEncoderB, CHANGE);
// Serial.println("Frequency Counter");
AD9850.init();
AD9850.reset();
AD9850.wr_serial(0x0, 10000); // 10KHz
FreqCounter::f_comp= 547; // Set compensation to 571
FreqCounter::start(1000); // Start counting with gatetime of 1000ms
}
//---------------------------- LOOP ---------------------------------
void loop(){
....
Nachtrag:
Das Verhalten tritt auch dann auf, wenn ich das Board anstelle USB mit einer Spannung aus einem Netzteil am Klinkenstecker betreibe. VOn 5 Mal startet er 1-2 mal.