Hallo Zusammen,
ich habe einen ATmega328P auf einem Breadboard und diesen über die
Arduino IDE programmiert. Output funktioniert auch alles super. Auch das
Senden von fixen Daten über Funk an meinen Pi funktioniert problemlos.
Was jedoch nicht funktioniert, ist das Abfragen von Eingängen.
void setup() {
//Bewegungssensor
pinMode(5, INPUT_PULLUP);
digitalWrite(5, HIGH);
}
void loop() {
//Dieser Wert ist immer 0 Dies ist jetzt ein Bewegungssensor.
//Auch Temperatursensor liefert keinen Wert.
//Das Gleiche direkt am Nano funktioniert super.
//Habe auch schon die Pins gewechselt.
int test = digitalRead(5);
}
Muss man hier bei einem nackten ATmega328P noch irgendetwas beachten was
beim Nano und Uno auch so funktioniert?
Danke!
VG, Thomas
Hey Christopher, vielen Dank für die schnelle Antwort.
Kannst du mir bitte ein Beispiel für meinen Code geben wie ich diese
Zuordnung mache?
Vielen Dank!
Thomas
Christopher B. schrieb:> Ja, die Zuordnung von pin Nummer zu Port
Die Zuordnung Pin Nummer zu Port erledigt die offensichtlich benutze
Arduino Software Ebene.
Thomas Z. schrieb:> Was jedoch nicht funktioniert, ist das Abfragen von Eingängen.
An welchem Pin vom ATmega328 hast du denn dein Signal angelegt und was
für eine Boardbeschreibungsdatei hast du in der Arduino IDE verwendet?
Ob du am richtigen Pin gewackelt hast, kannst du feststellen, indem du
ihn erstmal als Ausgang z.B. blinken läßt, prüfst, ob das der von dir
vermeintlich als Eingang zugeordnete Pin ist und du dann wieder zu
deiner Eingangstestfunktion gehst.
Hallo Wolfgang,
ich hatte den digitalen Pin 2 und Pin 5 verwendet.
ArduinoPin 2 am ATmega328P = PD2
ArduinoPin 5 am ATmega328P = PD5
Das mit der LED hatte ich an den Pins getestet und funktioniert
wunderbar.
Anbei die Boardbeschreibung:
##############################################################
atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=arduino
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard
atmega328bb.bootloader.tool=arduino:avrdude
atmega328bb.upload.tool=arduino:avrdude
Viele Grüße,
Thomas
Danke für den Hinweis mit dem doppelt gemoppelten. :)
Aber für mein Problem hast du auch keine Idee, was ich machen kann...
oder?
Das Teil kostet mich ganz schön Nerven.
Hallo,
zum ersten Posting,
ein "nackten" ATmega328P hat keinen Bootloader und läuft nur mit 1MHz RC
Oszillator !
Programmier ihn ohne die Arduino-IDE, das ist sicherlich die bessere
Lösung um schnellen Code zu schreiben.
Thomas Z. schrieb:> //Dieser Wert ist immer 0 Dies ist jetzt ein Bewegungssensor.> //Auch Temperatursensor liefert keinen Wert.
Woher weisst du das ?
Wo und wie wird dieser Wert angezeigt bzw. ausgegeben ?
> Aber für mein Problem hast du auch keine Idee, was ich machen kann...> oder?
In main() über serial ständig PD5 ausgeben.
Dann einfach PD5 mit einem Kabel mehrmals kurz mit Masse verbinden.
im loop laufen lassen.
Hallo Karl,
sorry, da habe ich mich wohl falsch ausgedrückt. Also der Arduino
Bootloader ist drauf. Mit nackt meinte ich nur, dass es ein reiner
ATmega328P ist. Wenn man nach ATmega328P googelt, findet man immer nur
Beiträge zu Arduinos.
Ich hätte ihn gerne mit Atmel Studio so programmiert, da ich mit Atmel
Studio allerdings nicht schaffen konnte, die String Bibliothek
einzubinden, bin ich dann auf die Arduino IDE umgestiegen.
Und hier geht soweit alles ganz gut, nur das Auslesen von Sensoren
leider nicht. Egal ob Temperatur- oder Bewegungssensor.
VG, Thomas
Hallo Marc, das weiß ich, weil ich mir die Werte mit einem Funkmodul
NRF24L01+ an meinen BananaPi senden lasse. Und dort sehe ich dann die
Daten die ankommen. Am Senden kann es nicht liegen. Sofern ich feste
Zahlen eintrage, kommen die sauber drüben an.
Hier mal der gesamte Code:
1
#include<SPI.h>
2
#include"nRF24L01.h"
3
#include"RF24.h"
4
#include"printf.h"
5
#include"DHT.h"
6
7
8
9
10
//DHT 22 Sensor
11
DHTdht;
12
13
/* Hardware configuration: Set up nRF24L01 radio on SPI bus plus pins 9, 13 */
Thomas Z. schrieb:> void loop() {>> //Dieser Wert ist immer 0 Dies ist jetzt ein Bewegungssensor.> //Auch Temperatursensor liefert keinen Wert.> //Das Gleiche direkt am Nano funktioniert super.> //Habe auch schon die Pins gewechselt.>> int test = digitalRead(5);>> }
hallo thomas,
so kann das nicht funktionieren!
die zeile "int test = digitalRead(5);" optimiert der kompiler einfach
weg, da "test" nicht weiter verwendet wird.
oder ist das nicht der vollständige code?
gruß toni
ups, da war ich wohl zu langsam :-(
Thomas Z. schrieb:> Daten die ankommen. Am Senden kann es nicht liegen. Sofern ich feste> Zahlen eintrage, kommen die sauber drüben an.
Und so ?
1
voidloop(){
2
data.test=digitalRead(5);
3
Serial.println(data.test);
4
5
delay(50);
6
}
Und dann mehrmals PD5 mit GND verbinden.
Wenn es funktioniert, dht testen, danach nRF.
Irgendwo muss man ja mit der Fehlersuche anfangen und das sollen ja
nicht gleich zwei Sensoren und 2 Funkmodule sein...
Hallo Marc, ich weise nochmal darauf hin, dass es sich um einen
ATmega328P handelt, der nur mit der Arduino IDE programmiert wird. Es
ist kein Arduino. Daher gibt es auch keine serielle Schnittstelle zu
meinem PC. Deshalb muss ich den Umweg über das Funkmodul gehen.
Thomas Z. schrieb:> ist kein Arduino. Daher gibt es auch keine serielle Schnittstelle zu> meinem PC. Deshalb muss ich den Umweg über das Funkmodul gehen.
Nein.
Lasse einfach an irgendeinem Portpin eine LED leuchten, wenn sich
am PD5 irgendetwas ändert, bzw. LED ist AN wenn PD5 == 0 und
AUS wenn PD5 == 1.
Dasselbe danach für dht, wenn dht <> 0, LED ist AN usw.
Thomas Z. schrieb:> Daher gibt es auch keine serielle Schnittstelle zu> meinem PC. Deshalb muss ich den Umweg über das Funkmodul gehen.
Ein Funkmodul scheint doch für solche elementaren Tests arg übertrieben.
Man könnte einfach einen anderen Pin als Ausgang initialisieren und dort
eine LED anschließen, auf die man ein Echo vom Pin 5 ausgibt.
So, ich habe jetzt mal einen Test mit einer LED gemacht und es tut sich
auch nichts.
Anbei mal ein Screenshot was mein oben gepostetes Programm derzeit an
den Pi sendet.
Thomas Z. schrieb:> So, ich habe jetzt mal einen Test mit einer LED gemacht und es tut sich> auch nichts.
Und wenn du PD5 mehrmals kurz mit GND verbindest ?
Also ich habe jetzt mal einen komplett neuen ATmega328P genommen und
jetzt kommen auch schon mal Werte an. Allerdings nicht die, dich ich mir
erhofft hatte. (siehe Screenshot)
Thomas Z. schrieb:> Also ich habe jetzt mal einen komplett neuen ATmega328P genommen und> jetzt kommen auch schon mal Werte an. Allerdings nicht die, dich ich mir> erhofft hatte. (siehe Screenshot)
Wie wird der Bewegungssensor gestartet und wie werden die Werte
eingelesen ?
Wo wird bei dir DHTPIN definiert ?
Wo wird bei dir DHTTYPE definiert ?
Thomas Z. schrieb:> Hall zusammen, anbei hänge ich nochmal den Schaltplan mit an. Vielleicht> ist der hilfreich.
Da solltest du erstmal ein bisschen aufräumen und die wirren Striche
beseitigen, bevor du den raus gibst.
Hallo Dieter, auch mit zusätzlichem externen Pullup-Widerstand wie auf
der Seite beschrieben, bekomm ich leider keine ordentlichen Werte. Temp:
0,0 Grad, Feuchtigkeit: 2,0 Prozent.
VG, Thomas
Thomas Z. schrieb:> ja, ich hatte es auch mit Angstkondensator versucht. Auch das hatte> leider nichts geholfen.
Tja, so geht das mit Arduino users - wenn der Sketch nicht läuft,
ist man schon am Ende...
Zum letzten Mal:
Marc V. schrieb:> Wo wird bei dir DHTPIN definiert ?> Wo wird bei dir DHTTYPE definiert ?Marc V. schrieb:> Wie wird der Bewegungssensor gestartet und wie werden die Werte> eingelesen ?Thomas Z. schrieb:> Der Bewegungsmelder (Sensor) muss ja nicht gestartet werden.> Eingelesen wird er hierdata.test = digitalRead(5);Marc V. schrieb:> Und wenn du PD5 mehrmals kurz mit GND verbindest ?
Reagiert PinD5 überhaupt als Eingang (Taster nach Masse) ?
Marc V. schrieb:> Tja, so geht das mit Arduino users - wenn der Sketch nicht läuft,> ist man schon am Ende...
Mag im Einzelfall so sein...
Aber kein Grund die kategorische Keule zu schwingen.
Falls du nicht weißt, was das bedeutet:
"kategorisches Urteil (einfache, nicht an Bedingungen geknüpfte
Behauptung)"
Aus dem Duden.
U. F. schrieb:> Falls du nicht weißt, was das bedeutet:
Danke, ich weiss es auch ohne Duden zu bemühen.
Falls du nicht weiter als Grundschule gekommen bist:
Das nennt sich Logik, wird schon in Gymnasium gelehrt.
Hallo Zusammen,
ich habe nochmal einen Test gemacht. Also Blink LED an PIN 2 und auch an
PIN 5 funktioniert super.
Es sind nur die Eingänge die nicht wollen. Selbst ein Taster liefert mir
nichts zurück. Egal ob gedrückt oder nicht. Egal ob mit oder ohne PULLUP
bzw. PULLDOWN - Widerstand. Es scheint fast so, als könnten die Pins an
diesem ATmega ausschließlich schreiben und nicht lesen.
Achso Marc,
DHT Type wird automatisch ermittelt. Das macht die Bibliothek die ich
oben gepostet hatte:
http://playground.arduino.cc/Main/DHTLib
DHT-Pin: Siehe oben den Code
Thomas Z. schrieb:> ich habe nochmal einen Test gemacht. Also Blink LED an PIN 2 und auch an> PIN 5 funktioniert super.>> Es sind nur die Eingänge die nicht wollen. Selbst ein Taster liefert mir> nichts zurück. Egal ob gedrückt oder nicht. Egal ob mit oder ohne PULLUP
Bravo.
Hat nicht mal volle 4 Tage gedauert.
Marc V. schrieb:> Dann einfach PD5 mit einem Kabel mehrmals kurz mit Masse verbinden.Marc V. schrieb:> Und dann mehrmals PD5 mit GND verbinden.Marc V. schrieb:> Lasse einfach an irgendeinem Portpin eine LED leuchten, wenn sich> am PD5 irgendetwas ändert, bzw. LED ist AN wenn PD5 == 0 undMarc V. schrieb:> Und wenn du PD5 mehrmals kurz mit GND verbindest ?Marc V. schrieb:> Reagiert PinD5 überhaupt als Eingang (Taster nach Masse) ?
Hallo Marc,
ich hatte die Tests vorher schon gemacht.
Auch deinen Trick, den Pin mehrmals kurz mit Masse zu verbinden. Dann
hat sich der Wert der Temperatur bei Verbindung von 1,0 auf NaN
geändert.
Hatte nur heute nochmal komplett von vorn begonnen. Da es aber heute
wieder nichts gebracht hatte, habe ich nun zusätzlich noch einen neuen
ATmega328P genommen und nun funktioniert zumindest mal der Taster und
ein Bodenfeuchtemesser bringt auch akzeptable Daten. Evtl. hat der
andere ATmega eine Macke. Kann es sein, dass die DHT Bibliothek, welche
ich verwende, einfach nur ausschließlich für Arduino funktioniert? Oder
kann es evtl. was mit der Frequenz zu tun haben wegen der Einlesezeit am
Sensor?
Hallo,
der Arduino ist ein Mega328 mit Bootloader.
Natülich verlassen sich die Routinen darauf, daß der AVR mit der
angegeben Taktfrequenz läuft, also 16MHz beim Uno und Nano und 8 oder
16MHz beim ProMini. Für andere Frequenzen wirst Du Dir eine passende
Boardbeschreibung in boards.txt bauen müssen, wenn Du mit der IDE
compilierst.
Gruß aus Berlin
Michael