Show Posts
Pages: [1] 2 3
1  International / Deutsch / Re: Arduino mit ISP programmieren klappt nicht mehr on: March 23, 2014, 07:39:43 am
> Du verwendest aber schon den Befehl "Datei -> Upload mit Programmer" ?

Ach, wie blöd kann man sein. Das war's, hab ich natürlich nicht gemacht. Als ich den Programmer das letzte Mal benutzt habe gab's die Funktion noch nicht.

Jetzt geht es.
2  International / Deutsch / Re: Arduino mit ISP programmieren klappt nicht mehr on: March 22, 2014, 01:45:15 pm
Ich hab die 1.0.5. Aber ich glaube ich bin der Lösung schon auf der Spur. In der boards.txt steht bei meinem Board (Duemilanove):
atmega328.upload.protocol=arduino
Diese Einstellung wird offenbar nicht mit der Einstellung in den preferences (stk500v2) überschrieben. Kommentiere ich die Zeile auf klappt es mit dem Programmer.
In früheren Versionen gab es den Eintrag offenbar nicht oder er wurde korrekt überschrieben.

Nur komisch, dass es bei Dir klappt...
3  International / Deutsch / Gelöst: Arduino mit ISP programmieren klappt nicht mehr on: March 22, 2014, 10:53:27 am
Hallo,

ich wollte nach längerer Zeit mal wieder einen Arduino (also eigentlich einen nackten ATmega328P) mit einem ISP aus der Arduino IDE programmieren. Hatte früher (vor version 1.x) immer gut geklappt. Ich habe einen mySmartUSB light unter MacOS X (10.6).

In der programmers.txt ist der eingetragen:

mySmartUSB.name=mySmartUSB
mySmartUSB.protocol=stk500v2
mySmartUSB.communication=serial

In der preferences.txt steht:

upload.using=mySmartUSB
upload.verbose=true
upload.verify=true

Auch in der IDE ist der Programmer ausgewählt inkl. des richtigen Ports. Trotzdem versucht die IDE aber offenbar den Arduino mittels Bootloader anzusprechen. Wenn ich normal per USB programmieren will klappt das problemlos, ohne wie früher in der preferences.txt von upload.using auf "booloader" umstellen zu müssen.
Nur mit dem ISP klappt es eben nicht:

Binäre Sketchgröße: 1.084 Bytes (von einem Maximum von 30.720 Bytes)
Binäre Sketchgröße: 1.084 Bytes (von einem Maximum von 30.720 Bytes)
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -carduino -P/dev/tty.SLAB_USBtoUART -b57600 -D -Uflash:w:/var/folders/Rd/Rdw6kkoGEWKYUCGo58eDFU+++TM/-Tmp-/build5212045137433840532.tmp/Blink.cpp.hex:i

avrdude: Version 5.11, compiled on Sep  2 2011 at 18:52:52
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/Users/xxx/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/tty.SLAB_USBtoUART
         Using Programmer              : arduino
         Overriding Baud Rate          : 57600
avrdude: Send: 0 [30]   [20]
avrdude: Send: 0 [30]   [20]
avrdude: Send: 0 [30]   [20]
avrdude: Recv: . [0a]
avrdude: stk500_getsync(): not in sync: resp=0x0a

avrdude done.  Thank you.

 Was hier im avrdude auffällt: -carduino, müsste hier nicht -c stk500v2 stehen?

Verwende ich avrdude von der Kommandozeile mit dem Parameter -c stk500v2 kann ich den Controller flashen (hab da nur noch das Problem, dass es immer nur ein mal klappt, danach muss ich den Programmer abziehen und neu anstecken).

Was mache ich falsch?



4  International / Deutsch / Re: Wave Shield in Kombination mit GPS - fail on: February 27, 2014, 08:34:35 am
Das ist aber kaum der Grund für das merkwürdige Verhalten oder?
5  International / Deutsch / Re: Wave Shield in Kombination mit GPS - fail on: February 27, 2014, 04:35:23 am
Die ganzen Delays hab ich drin weil ich dachte ich lasse den Methoden in den Libs etwas Zeit (oder einfach weil ich warten will bevor die nächste Soundausgabe passiert). Mit weniger Delay gibt es aber die gleichen Effekte.

Das F-Makro hab ich doch (fast) überall drin.
6  International / Deutsch / Re: Wave Shield in Kombination mit GPS - fail on: February 27, 2014, 03:42:06 am
Ich hab schon jede Menge Serial.print.
Sketch (eine Variante):


#include <SoftwareSerial.h>
#include <TinyGPS++.h>

#include <WaveHC.h>
#include <WaveUtil.h>

#include <SoftwareServo.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
 It requires the use of NewSoftSerial, and assumes that you have a
 4800-baud serial GPS device hooked up on pins 8(rx) / pin 3 of GPS module and 9(tx) / pin 4 of GPS module.
 GPS-Module 1 + 5 -> GND, 2 -> VIN
 */

/*
  * Pins used: GPS: 8,9 Servo: 7
 
 * What pins are used by the shield?
 
 * Pins 13, 12, 11 are always used by the SD card
 * (they are the only pins that have a high speed SPI interface).
 * Then there are 5 other pins used to talk to the DAC and SD card,
 * but they can be set to connect to any arduino pin.
 * However, by default, the library is configured
 * to use pins 10 (for SD card) and pins 2, 3, 4 and 5 for the DAC.
 
 * That means pins 6, 7, 8, 9 and the 6 analog in pins
 * (also known as digital i/o pins 14-20) are available.
 
 */

static const int RXPin = 8, TXPin = 9;
static const int ServoPin = 7;

static const uint32_t GPSBaud = 4800;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

SoftwareServo myservo;

#define LED 13

SdReader card;    // This object holds the information for the card
FatVolume vol;    // This holds the information for the partition on the card
FatReader root;   // This holds the information for the volumes root directory
FatReader file;   // This object represent the WAV file for a pi digit or period
WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time
/*
 * Define macro to put error messages in flash memory
 */
#define error(msg) error_P(PSTR(msg))

double LAT[] = {
  54.1, 54.2, 54.3, 54.4, 54.5, 54.6};
double LON[] = {
  12.1, 12.2, 12.3, 12.4, 12.5, 12.6};

int countStations = sizeof(LAT) / sizeof(double);
int nextStation = 0;

double lastDistance = 0.0;

void setup()
{
  pinMode(LED, OUTPUT);
  Serial.begin(9600);

  initServo();

  audioSetup();  
  gpsSetup();
  delay(1000);
  playcomplete("INTRO.WAV");
  delay(2000);
  playcomplete("GPSPREP.WAV");
  Serial.print(countStations);
  Serial.println(F(" Stations to find"));
  delay(10000);
}

void loop()
{
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0) {
    if (gps.encode(ss.read())) {
      displayInfo();
    }
  }
  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));

    while(true);
  }
}


void audioSetup()
{
  // AUDIO SETUP
  // PgmPrintln("Pi speaker");

  if (!card.init()) {
    error("Card init. failed!");
  }
  if (!vol.init(card)) {
    error("No partition!");
  }
  if (!root.openRoot(vol)) {
    error("Couldn't open dir");
  }

  // PgmPrintln("Files found:");
  // root.ls();
}

void gpsSetup()
{
  ss.begin(GPSBaud);

  Serial.print(F("Started. TinyGPS++ Library version "));
  Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println();
}

// GPS Helper
void displayInfo()
{
  Serial.print(F("Location: "));
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);

    Serial.println();

    double distance =
      gps.distanceBetween(gps.location.lat(), gps.location.lng(), LAT[nextStation], LON[nextStation]);
    double courseTo =
      gps.courseTo(
    gps.location.lat(),
    gps.location.lng(),
    LAT[nextStation],
    LON[nextStation]);
    Serial.print(F("Distance (m) to Station "));
    Serial.print(nextStation);
    Serial.print(" : ");
    Serial.println(distance);

    if (lastDistance == 0.0) {
      lastDistance = distance;
    }

    if (lastDistance > distance) {
      playcomplete("HOT.WAV");
    }
    else {
      playcomplete("COLD.WAV");
    }

    if (distance < 20.0) {
      // FOUND
      Serial.print(F("Station "));
      Serial.print(nextStation);
      Serial.println(F(" found"));

      lastDistance = 0.0;
      nextStation++;
      if (nextStation == countStations) {
        unlockDoor();
      }
      else {

        //        char filename[12];
        //        strcpy(filename, "FOUND");
        //        char buffer[2];
        //        itoa(nextStation-1, buffer, 10);
        //        strcat(filename, buffer);
        //        strcat(filename, ".WAV");
        //        strcat(filename, "\0");
        //        playcomplete(filename);
      }

    }
    else {
      /*
      char distbuffer[10];
       dtostrf(distance, 6, 0, distbuffer);
       for (int i = 0; i < sizeof(distbuffer) - 1; i++) {
       speaknum(distbuffer);
       }
       */
      Serial.print(F("Course to Station: "));

      const char* course = gps.cardinal(courseTo);
      Serial.println(course);
      Serial.println();

      char filename[7];
      strcpy(filename, course);
      strcat(filename, ".WAV");
      strcat(filename, "\0");
      playcomplete(filename);

      delay(10000);

      lastDistance = distance;

    }
  }
  else
  {
    Serial.println(F("INVALID"));
    playcomplete("WAITGPS.WAV");
  }

}

/////////////////////////////////// AUDIO HELPERS

char filename[13];

void speaknum(char c) {
  uint8_t i=0;

  // copy flash string for 'period' to filename
  strcpy_P(filename, PSTR("P.WAV"));

  if ('0' <= c && c <= 'Z') {
    // digit - change 'P' to digit
    filename[0] = c;
    i = 1;
  }
  else if (c != '.') {
    // error if not period
    return;
  }
  playcomplete(filename);
}

/*
 * print error message and halt
 */
void error_P(const char *str) {
  PgmPrint("Error: ");
  SerialPrint_P(str);
  sdErrorCheck();
  while(1);
}
/*
 * print error message and halt if SD I/O error
 */
void sdErrorCheck(void) {
  if (!card.errorCode()) return;
  PgmPrint("\r\nSD I/O error: ");
  Serial.print(card.errorCode(), HEX);
  PgmPrint(", ");
  Serial.println(card.errorData(), HEX);
  while(1);
}
/*
 * Play a file and wait for it to complete
 */
void playcomplete(char *name) {
  ss.end();
  playfile(name);
  while (wave.isplaying);

  // see if an error occurred while playing
  sdErrorCheck();
  delay(100);
  ss.begin(GPSBaud);
}
/*
 * Open and start playing a WAV file
 */
void playfile(char *name) {
  if (wave.isplaying) {// already playing something, so stop it!
    wave.stop(); // stop it
  }
  if (!file.open(root, name)) {
    PgmPrint("Couldn't open file ");
    Serial.print(name);
    return;
  }
  if (!wave.create(file)) {
    PgmPrintln("Not a valid WAV");
    return;
  }
  // ok time to play!
  wave.play();
}

//// UNLOCK //////
void unlockDoor() {
  playcomplete("FOUND.WAV");
  delay(100);

  ss.end();
  SoftwareServo myservo;

  myservo.attach(ServoPin);  // attaches the servo on pin 7 to the servo object

  myservo.write(45);
  for (int i = 0; i < 2000; i++) {
    SoftwareServo::refresh();
    delay(10);
  }

  delay(1000);
  myservo.write(0);
  for (int i = 0; i < 10; i++) {
    SoftwareServo::refresh();
    delay(10);
  }
  myservo.detach();

  while(true);
}


void initServo() {
  myservo.attach(ServoPin);  // attaches the servo on pin 7 to the servo object
  myservo.write(0);
  for (int i = 0; i < 10; i++) {
    SoftwareServo::refresh();
    delay(10);
  }
  myservo.detach();
}


7  International / Deutsch / Wave Shield in Kombination mit GPS - fail on: February 27, 2014, 03:16:41 am
Hallöle,

ich hab mich in den letzten Tagen mächtig rumgeärgert mit der Kombination aus dem Lady Ada Wave Shield und GPS (Libraries WaveHC und TinyGPS++ mit SoftwareSerial). Ich wollte Course und Entfernung als Sprache ausgeben. Alles läuft gut solange ich das eigentliche Sound-Abspielen auskommentiere. Mit Sound sind die Ergebnisse völlig unvorhersehbar. Manchmal bleibt mein Sketch schon im Setup stecken und ich sehe nicht warum (einen wirklichen Debugger gibt's für Arduino ja wohl nicht oder?). Gelegentlich läuft auch alles wie geplant, aber sehr selten.

Arduino ist ein Duemilanove (ATmega328P). Evtl. Speicherprobleme?

Hat da jemand schon mal Erfahrungen gemacht?
8  Products / Arduino Due / WiFi dongle on USB host port on: November 15, 2012, 02:08:55 am
Would it be possible to connect a cheap standard USB Wifi to the Due's USB in host mode? Are there any drivers available yet?
9  International / Deutsch / Re: Warum eigentlich so teuer? on: November 11, 2012, 06:27:47 am
Alles keine sinnvolle Begründung oder?
10  International / Deutsch / Warum eigentlich so teuer? on: November 10, 2012, 11:27:14 am
Kann mir mal jemand erklären warum die Arduino-Boards eigentlich immer noch so teuer sind, vor allem verglichen mit dem RaspberryPi? Dort bekommt man viel leistungsfähigere Hardware, USB UND Ethernet onboard und zahlt trotzdem weniger als z.B. bei Due, der noch nicht mal Ethernet hat.
11  International / Deutsch / Re: Arduino selber bauen - wie programmieren? on: November 20, 2011, 05:03:59 am
Hallo,

ich benutze diesen Programmer: http://shop.myavr.de/index.php?sp=article.sp.php&artID=200006
Klein, preiswert, lässt sich direkt aus der Arduino-IDE ansprechen. Dann braucht man überhaupt keinen Bootloader mehr.
12  International / Deutsch / Re: 2 gleichnamige Funktionen in der Library on: November 12, 2011, 01:36:47 pm
Ich bin mir nicht ganz sicher aber in
Code:
func ( 222 );
sollte der Compiler die 222 als int interpretieren wenn man nicht explizit was anderes angibt.
Aber solche Mehrdeutigkeiten sollte man besser vermeiden, also wie schon geschrieben im Zweifel lieber explizit casten.
13  International / Deutsch / Re: Lego Powerfunctions IR on: November 04, 2011, 07:59:25 am
Wieso willst Du das per IR steuern? Kann man die Motoren nicht direkt an den Arduino hängen (via Motortreiber o.ä.) natürlich? Keine Probleme mit Protokollen etc.
14  International / Deutsch / Re: 2 gleichnamige Funktionen in der Library on: November 03, 2011, 11:54:46 am
Das ist ja eher nicht Arduino-typisch sondern ganz klassisch C. Der "normale" Arduino-Nutzer soll sich mit Pointern etc. ja gar nicht rumärgern müssen.
15  International / Deutsch / Re: 2 gleichnamige Funktionen in der Library on: November 03, 2011, 03:54:31 am
Die zwei Funktionen haben zwar den gleichen Namen aber eine unterschiedliche Signatur, d.h. Anzahl und / oder Typen der Parameter sind verschieden. Dadurch kann der Compiler die auseinanderhalten, sind praktisch zwei verschiedene Funktionen.

Die Klammer-Schreibweise ist ein sog. Type-Casting, da wird ein Wert eines Typs in einen anderem umgewandelt (gecastet).
Die obere Funktion verlangt die Parameter im Typ uint8_t (irgend ein spezieller Typ der irgendwo definiert wurde, ich nehme mal un unsigned (vorzeichenlos) integer 8 bit), die untere Funktion hat die Werte aber im Typ int (genau genommen jeweils Zeiger auf ..).
Das passt erst mal nicht zusammen, muss also gecastet werden. Wobei theoretisch der Wertebereich beim int höher sein dürfte als beim uint8_t, das Casten also nicht ganz sauber ist, da aber als Werte bei Skunde, Minute etc. soweiso keine höheren Werte als 255 auftreten können passt das hier schon.
Pages: [1] 2 3