Neuer Arduino UNO SMD defekt?

Habe heute mit dem Buch "Powerprojekte mit Arduino und C" einen weiteren Arduino Uno erhalten. Im Gegensatz zu meine beiden anderen, ein Orgrinaler, jedoch mit SMD Controller.

Habe die Prototyp Platine vom anderen Arduino auf diese gepackt. Verdrahtung nicht geändert.

Das Programm liest 3 Potis(25k) aus, gibt diese Werte an eine RGB LED und das I2C Display weiter.

#include <Wire.h> 
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR    0x27
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
LiquidCrystal_I2C	
lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,
D4_pin,D5_pin,D6_pin,D7_pin);

const int potPin[] = {
  2, 1, 0};
const int ledPin[] = {
  3, 5, 6};
int   rgb[] = {
  0, 0, 0};

void setup() {
  for(int i = 0; i < 3; i++) {
    pinMode(ledPin[i], OUTPUT);
  }
  lcd.begin(16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home ();
}

void loop() {
  rgb[0] = analogRead(potPin[0]) / 4;
  rgb[1] = analogRead(potPin[1]) / 4;
  rgb[2] = analogRead(potPin[2]) / 4;

  analogWrite(ledPin[0], rgb[0]);
  analogWrite(ledPin[1], rgb[1]);
  analogWrite(ledPin[2], rgb[2]);

  lcd.setCursor(0,0);
  lcd.print("rgb[r, g, b] = {");
  lcd.setCursor(0,1);
  lcd.print(" ");
  print3digits(rgb[0]);
  lcd.print(", ");
  print3digits(rgb[1]);
  lcd.print(", ");
  print3digits(rgb[2]);
  lcd.print("};");
}

void print3digits(int i) {
  if(i >= 0 && i < 10) {
    lcd.print("  ");
    lcd.print(i);
  }
  else if(i >= 10 && i < 100) {
    lcd.print(" ");
  lcd.print(i);
  }
  else lcd.print(i);
}

Die PWM IOs 5 und 6 geben keine Mucks von sich. Habe auch das Beispiel "blink without delay" ausgeührt mit beiden LEDs ausprobiert, nichts geht. Die anderen Ausgänge funktionieren wie gewünscht. Gibt es irgendwo eine Möglichkeit, den UNO auf Werkseinstellungen zu setzen mit dem Gedanken, irgendwo hat es etwas im Bootloader zerschossen.

Andernfalls, sind die SMD Varianten empfindlicher als die mit der DIP Variante?

Der Bootloader ist nur für die Übertragung des sketches zusändig. Einmal fertig oder wenn keine Übertragung erwünscht wird wird der Sketch aufgerufen und der Bootlaoder nie mehr (bis zum nächsten Reset) angesprungen.
Ein fehlerhafter Bootlaoder kann nicht der Grund sein daß 2 Pins nicht funktionieren.

Du machst wieder Fehler.
Du benutzt Pin 5 und 6 in
lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);

Grüße Uwe

Hallo Uwe, das kommt von der Libary, hat nichts mit den IOs zu tun.

Beispielssketch der I2C Anbindung des LCDs.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>



#define BACKLIGHT_PIN     13

LiquidCrystal_I2C lcd(0x38);  // Set the LCD I2C address

//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address


// Creat a set of new characters
const uint8_t charBitmap[][8] = {
   { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 },
   { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 },
   { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 },
   { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 },
   { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 },
   { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 },
   { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 },
   { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 }
   
};

void setup()
{
   int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0]));

  // Switch on the backlight
  pinMode ( BACKLIGHT_PIN, OUTPUT );
  digitalWrite ( BACKLIGHT_PIN, HIGH );
  
  lcd.begin(16,2);               // initialize the lcd 

   for ( int i = 0; i < charBitmapSize; i++ )
   {
      lcd.createChar ( i, (uint8_t *)charBitmap[i] );
   }

  lcd.home ();                   // go home
  lcd.print("Hello, ARDUINO ");  
  lcd.setCursor ( 0, 1 );        // go to the next line
  lcd.print (" FORUM - fm   ");
  delay ( 1000 );
}

void loop()
{
   lcd.home ();
   // Do a little animation by writing to the same location
   for ( int i = 0; i < 2; i++ )
   {
      for ( int j = 0; j < 16; j++ )
      {
         lcd.print (char(random(7)));
      }
      lcd.setCursor ( 0, 1 );
   }
   delay (200);
}

wenn Du nur :

const int potPin[] = {
  2, 1, 0};
const int ledPin[] = {
  3, 5, 6};
int   rgb[] = {
  0, 0, 0};

void setup() {
  for(int i = 0; i < 3; i++) {
    pinMode(ledPin[i], OUTPUT);
  }
  }

void loop() {
  rgb[0] = analogRead(potPin[0]) / 4;
  rgb[1] = analogRead(potPin[1]) / 4;
  rgb[2] = analogRead(potPin[2]) / 4;

  analogWrite(ledPin[0], rgb[0]);
  analogWrite(ledPin[1], rgb[1]);
  analogWrite(ledPin[2], rgb[2]);
}

Schreibst funktionieren dann die Pins 5 und 6?

Grüße Uwe

Nein,

ich habe dein Sketch kompiliert und hochgeladen. Die gleichen Symptone wie vorher. Was mir jedoch auffiel, ledPin 5 leuchtet zwischendurch ganz schwach.

Hab nun mal das Multimeter zur Hilfe genommen: (ledPin x <-> GND)

Folgende Werte bei theoretisch ledPin Ausgangsspannung 5V (255):
Wert 1 unbelastet ; Wert 2 belastet (20mA LED + Vorwiederstand);

USB 5V: (UB 4,841V)
ledPin 3 = 4,831V; 4,408V
ledPin 4 = 4,760V; 3,0664V
ledPin 5 = 1,207V ; 1,1258V

Hohlstecker 12V: (UB 4,985V)
ledPin 3 = 4,985V; 4,576V
ledPin 4 = 4,881V; 3,080V
ledPin 5 = 1,590V; 1,191V

Messeregbnis sieht absolut bescheiden aus :zipper_mouth_face:

Irgendwas passt da ganz und garnicht. Habe jetzt 2mal nachgemessen um nicht einen Flüchtigkeitsfehler zu machen.

Werd ihn morgen dann ggf. wieder zurückschicken an Reichelt. MIt dem Buch zusammen kam ich über die Mindestpauschale. Werde dann überlegen, mir einen Arduino org. beim C zu holen da ich da noch einen Gutschein hab

Ja, der scheint dann kaputt zu sein. wieso willst Du ihn zurückgeben und nicht in Garantie gegen einen funktionierenden umtauschen?
Grüße Uwe

Für mich sehe ich keinen Vorteil, wenn der Kontroller komplett als SMD aufgelötet ist. Bin mit dem Mega meist auch vorhsichtig (gerade bei den gro0en Proto Shields. Denke da ein bisschen an den "Eyelot?!) der PS3.Die Höhe vom Standard Uno reicht vollkommen aus, dort kann ich die Proto Shields auch entsprechend "tieferlegen"..