Hallo Community. Ich programmiere mir zurzeit eine Komplexe Kreuzungsampel mit Fußgängerübergang. Aber mein Problem ist das ich mit der _delay_ms(ms); Funktion arbeitet da die Ampel automatische Schaltet. Zudem nutze ich auch noch Interrupts, da ich mit ein Mirkotaster Arbeite. Wie man das ja bei vielen Ampel kennt darf ja auch, die "Signal Kommt" oder "Bitte Warten" Lampe nicht fehlen. Diese habe ich auch eingebaut und, diese soll natürlich auch Blinken. Um mir aber ein Paar Werte auszugeben. Da bei mir der Timer 8 Bit bisschen "komisch" ist. Was die Antwortzeit an geht. Nun ja um mir die Werte auszugeben nutzte ich denn Seriellen Monitor von der Arduino IDE. Im Internet habe ich ein kleines Tutorial, für eine einfache Serial Kommunikation gefunden(RX, TX). Dieses wollte ich nun wenden um mir am Ende ein paar Daten auszugeben. Nur wenn ich zum Beispiel _BV() oder loop_until_bit_is_set() nutzen will die ja normalerweise(So steht es zu mindestes im Internet) in der avr/io.h sich befinden sollen, findet der diese Methode nicht. Woran kann diese liegen? Hier ist der Link zum Tutorial das ich nutzte: http://www.appelsiini.net/2011/simple-usart-with-avr-libc Hier ein Bild von mein aktuellen Code: http://prntscr.com/a1ji6e Wenn ich zum Beispiel über "loop_until_bits..." gehe kommt da: "Add Include "sfr_defs.h" sind das nun alles ein extra Header Dateien? Aso hier nochmal ein Bild, von der Output Log: http://prntscr.com/a1jkdt Mfg Jan
:
Bearbeitet durch User
> Aso hier nochmal ein Bild, von der Output Log: http://prntscr.com/a1jkdt
Einfach mal die erste Fehlermeldung lesen und die Ursache beheben. Achja
und Bilder kann man auch hier anhängen.
@ Felix Neumann (felix_n888) >Ich programmiere mir zurzeit eine Komplexe Kreuzungsampel mit >Fußgängerübergang. Aber mein Problem ist das ich mit der _delay_ms(ms); >Funktion arbeitet da die Ampel automatische Schaltet. Naja, nicht die schönste Lösung, geht aber. Besser ist es aber so, siehe Statemachine. >soll natürlich auch Blinken. Um mir aber ein Paar Werte auszugeben. Da >bei mir der Timer 8 Bit bisschen "komisch" ist. Was ist da komisch? >ich nun wenden um mir am Ende ein paar Daten auszugeben. Nur wenn ich >zum Beispiel _BV() oder loop_until_bit_is_set() nutzen will Das ist alter Kram, heute kann man die Bits direkt abfragen, einfach hinschreiben, siehe Bitmanipulation. > die ja >normalerweise(So steht es zu mindestes im Internet) in der avr/io.h sich >befinden sollen, findet der diese Methode nicht. Methoden gibt es dort so oder so nicht, denn der avr gcc ist reines C. Methoden gibt es nur in C++. jaja, Arduino hat einen Schuß C++, aber der ist fast hömiopatisch ;-) >Woran kann diese liegen? >Hier ist der Link zum Tutorial das ich nutzte: >http://www.appelsiini.net/2011/simple-usart-with-avr-libc Wenn du doch schon mit der Arduino-IDE arbeitest, kannst du auch gleich die Arduino-Libs für den UART nutzen. >Hier ein Bild von mein aktuellen Code: http://prntscr.com/a1ji6e >Wenn ich zum Beispiel über "loop_until_bits..." gehe kommt da: "Add >Include "sfr_defs.h" sind das nun alles ein extra Header Dateien? ??? >Aso hier nochmal ein Bild, von der Output Log: http://prntscr.com/a1jkdt Mfg Jan
Danke erst mal für euere Antworten. Ich habe mir mal ein Video dazu angeschaut. Also zu Serial Kommunikation. Es Funktioniert auch. Nur ich gebe ja in mein Code die Zahl "8" aus. Und habe dann ein Kabel von meinen Arduino UNO Board zum Breadboard angeschlossen(Also RESET, RX, TX, +5, 0 V). Damit ich das Programm übertragen kann wenn ich aber versuche über denn Serial Monitor versuche dieses Signal wieder "auf zunehmen" kommt dort nur das a mit dem schrägen Strich drauf. Wenn ich es über Tera Term versuche "auf zunehmen" dann kommt dort nur ein dieses Zeichen ' . Woran liegt das? Am UNO Board selber?
Falsche Baudrate. Erfinde das Rad nicht neu, nutze die Arduino-Funktionen!
1 | void setup() |
2 | {
|
3 | Serial.begin(9600); |
4 | }
|
5 | |
6 | void loop() |
7 | {
|
8 | Serial.println("Hello World!"); |
9 | }
|
Hallo Falk Brunner! Ich hätte dazu 2 Fragen: - Wo liegt denn die Datei die ich Includieren muss um auf "Serial." zugreifen zu können? Sonst kommt 'Serial' was not declared in this scope - Wieso ist denn die Baudrate falsch beim Arduino ist sie doch auch 9600?
@ Felix Neumann (felix_n888) >- Wo liegt denn die Datei die ich Includieren muss um auf "Serial." >zugreifen zu können? Sonst kommt 'Serial' was not declared in this scope Das ist ein Beispiel für Arduino, die kann man direkt in der Arduino IDE so compilieren. Wenn man ein Arduino-Board im Atmelstudio nutzt, muss man vielleicht noch ein Include #include <arduino.h> hinzufügen, da kenn ich mich aber nicht aus. >- Wieso ist denn die Baudrate falsch beim Arduino ist sie doch auch >9600? Keine Ahnung. Hast du einen bayrischen Arduino? #define BUAD 9600 ;-)
:
Bearbeitet durch User
Falk B. schrieb: > Keine Ahnung. > > Hast du einen bayrischen Arduino? > > #define BUAD 9600 Keine Ahnung. Ich habe diesen http://danielscheidler.de/wp-content/uploads/2013/02/ArduinoUno_R3_Front.jpg "Made in Italy" steht dort auch. #define BUAD 9600 stand doch auch schon in meinen Code. Oder habe ich da nun irgendwas falsch verstanden? Es gibt ja auch solche USB Kabels mit VCC, GND, TX, RX, CTS und RTS. Aber eigentlich muss sowas doch auch dirket übers Board gehen. Ich werde parallel noch ein Thread im Arduino Forum machen und dort mal nach fragen
Felix N. schrieb: > Ich werde > parallel noch ein Thread im Arduino Forum machen und dort mal nach > fragen Das ist eine gute Idee! Je weniger Ahnung, desto mehr Foren beschäftigen....
Felix N. schrieb: > ein Mirkotaster Ist das sowas wie ein "Felixschalter"? Felix N. schrieb: > #define BUAD 9600 stand doch auch schon in meinen Code. Der Mann hieß "BAUD"... Du solltest dir merken: Menschen reagieren gelockert auf Schreibfehler. Compiler bissig! g457 schrieb: > Achja und Bilder kann man auch hier anhängen. Und Fehlermeldungen und Quelltexte kann man als "ASCII-Code" direkt in die Editbox einfügen...
Felix N. schrieb: > Hier ein Bild von mein aktuellen Code: http://prntscr.com/a1ji6e Code nie, unter keinen Umständen, absolut gar nicht und auf keinen Fall als Bild posten! Wie soll man solchen Code zitieren, Syntax prüfen oder compilieren? Code immer als plain Quelltext posten (*.c, *.ino). Und am besten als Anhang, dann kann man nämlich die Fehlermeldungen (Zeilennummer) zuordnen.
Lothar M. schrieb: >> #define BUAD 9600 stand doch auch schon in meinen Code. > Der Mann hieß "BAUD"... > > Du solltest dir merken: Menschen reagieren gelockert auf Schreibfehler. > Compiler bissig! Ich habe es nun zu BAUD angepasst. Aber es ändert sich nix. Immer noch kommen die gleichen Zeichen in der Console an. Kann es sein(Ich weis ja nicht ob sich damit jemand auskennt), das das Arduino UNO Board oder allgemein die Arduino Board nicht dazu in der Lage sind über denn TX/RX(digital pin 1 und 0) Signal zu empfangen und dann weiter zuleiten? Mfg Felix
Felix N. schrieb: > Kann es sein(Ich weis ja nicht ob sich damit jemand auskennt) Du bist zum Glück nicht der Erste, der sowas machen will. Da gibt es zwei Möglichkeiten: 1. Was sagt das Handbuch? https://www.arduino.cc/en/Reference/Serial 2. Wie haben es denn Andere gemacht? https://www.google.de/search?q=arduino+uno+rx+tx Fazit 1: doch, es geht. Fazit 2: Fehlersuche besteht zuallererst aus der Fehleranalyse... > Immer noch kommen die gleichen Zeichen in der Console an. Lass dir die Zeichen mal als Hex-Zahl anzeigen. Kommt immer das selbe Zeichen an, egal was du sendest? Was passiert, wenn du am Terminal die Baudrate umschaltest? Hast du ein Oszilloskop zur Hand? Kommen gleich viele falsche Zeichen an, wie gesendet werden? Oder sind es mehr bzw. weniger?
:
Bearbeitet durch Moderator
Mit ner 1s Blink-LED überprüfen, ob F_CPU überhaupt stimmt.
Lothar M. schrieb: >> Immer noch kommen die gleichen Zeichen in der Console an. > Lass dir die Zeichen mal als Hex-Zahl anzeigen. Kommt immer das selbe > Zeichen an, egal was du sendest? Was passiert, wenn du am Terminal die > Baudrate umschaltest? Hast du ein Oszilloskop zur Hand? Kommen gleich > viele falsche Zeichen an, wie gesendet werden? Oder sind es mehr bzw. > weniger? Hex Zahl anzeigen Öh wie geht denn das? Es kommen immer die gleichen Zahlen an wenn ich aber das Zeichen von einer 8 zu einen A welche kommt dort wieder ein anderes Zeichen an und so weiter... Wenn ich die Baudrate umschalte z.B auf 57600 dann kommen diese Zeichen: ³³³³³. Wenn ich es noch höher stelle dann kommt nix mehr. Also keine Zeichen mehr an. Habe kein Oszilloskop zu teuer. Nein es kommen immer nur im Sekunden Takt Daten an und immer von der gleichen menge her. Peter D. schrieb: > Mit ner 1s Blink-LED überprüfen, ob F_CPU überhaupt stimmt. Habe es getestet F_CPU ist richtig 16 MHZ
:
Bearbeitet durch User
Felix N. schrieb: > Habe es getestet F_CPU ist richtig 16 MHZ Und der Controller verwendet auch diese Taktquelle mit 16MHz? Und somit blinkt diese Test-LED 1x pro Sekunde?
So Lothar M. schrieb: > Felix N. schrieb: >> Habe es getestet F_CPU ist richtig 16 MHZ > Und der Controller verwendet auch diese Taktquelle mit 16MHz? > Und somit blinkt diese Test-LED 1x pro Sekunde? So habe ich dieses getestet:
1 | #define F_CPU 16000000UL
|
2 | |
3 | #include <avr/io.h> |
4 | #include <util/delay.h> |
5 | |
6 | #define LED 5
|
7 | |
8 | int main(void){ |
9 | |
10 | DDRB = (1<<LED); |
11 | |
12 | while (1) { |
13 | PORTB |= (1<<LED); |
14 | _delay_ms(500); |
15 | PORTB &= ~(1<<LED); |
16 | _delay_ms(500); |
17 | }
|
18 | }
|
keine ne Idee? Wenn ich mir ein USB to TTL Adapter kaufen würde, würde dann das Problem behoben sein? Mfg Felix
Felix N. schrieb: > Wenn ich mir ein USB to TTL Adapter kaufen würde, würde dann das Problem > behoben sein? Das "Problem" muss für eine zutreffende Aussage erst mal untersucht werden. Spar dir das Geld für einen Adapter und kauf dafür irgendein ein noch so lausiges Oszilloskop. Dann kannst du Messen und musst nicht Raten... Brück mal an deiner seriellen Schnitte die RX und TX Leitung und Tipp was ins Terminal ein. Du müsstest dann "deine" Zeichen wieder zurückbekommen. Funktioniert wenigstens das?
Lothar M. schrieb: >> Wenn ich mir ein USB to TTL Adapter kaufen würde, würde dann das Problem >> behoben sein? > Das "Problem" muss für eine zutreffende Aussage erst mal untersucht > werden. Spar dir das Geld für einen Adapter und kauf dafür irgendein ein > noch so lausiges Oszilloskop. Dann kannst du Messen und musst nicht > Raten... > > Brück mal an deiner seriellen Schnitte die RX und TX Leitung und Tipp > was ins Terminal ein. Du müsstest dann "deine" Zeichen wieder > zurückbekommen. Funktioniert wenigstens das? Hallo Lothar! Ich habe es mir ja auch nicht gekauft wahr nur eine frage. Also wenn ich in Tera Term was eingebe z.B 1 oder 0 dann kann ich am Arduino Board sehen das was über RX gesendet wird aber in der Console kommt es selber, nicht an. Es ist überbrückt. Ich habe vorhin mal ein Skript mit der Arduino IDE Programmiert mit Serial.begin(9600); und Serial.print("0") Das kommt auch richtig an. Also es erscheint wieder die Zhal "0" wenn ich aber mit UDR0 = '0' sende kommt dort nur ein "." an. Ich denke mal das das Problem im Code liegt. Ich würde mir ja gerne die cpp Datei anschauen wo die print Methode drin ist. Aber ich denke mal das diese in der IDE "rein" programmiert sind und nicht als externe Datei vorliegen. Oder?
@ Felix Neumann (felix_n888) >Wenn ich mir ein USB to TTL Adapter kaufen würde, würde dann das Problem >behoben sein? Für einen Arduino? Der hat das doch schon auf dem Board? "Und habe dann ein Kabel von meinen Arduino UNO Board zum Breadboard angeschlossen(Also RESET, RX, TX, +5, 0 V). " https://www.arduino.cc/en/Main/ArduinoBoardUno Warum machst du das alles so verdammt umständlich? Schließ das normale USB-Kabel an den Arduino an, programmier mit der Arduino-IDE, nicht Atmelstudio und sei erstmal glücklich. Da braucht man keinerlei Steckbrett, um den UART zu nutzen! Damit kann man SEHR viel machen und lernen, ehe man die zusätzlichen Möglichkeiten des "echten" Zugriffs auf alle AVR-Komponenten jenseits der Arduino-Funktionen braucht. >in Tera Term was eingebe z.B 1 oder 0 dann kann ich am Arduino Board >sehen das was über RX gesendet wird aber in der Console kommt es selber, >nicht an. Es ist überbrückt. Was ist EXAKT WO gebrückt? > Ich habe vorhin mal ein Skript mit der >Arduino IDE Programmiert mit Serial.begin(9600); und Serial.print("0") >Das kommt auch richtig an. Dann nutze das weiter! >Ich denke mal das das Problem im Code liegt. Ja. >Ich würde mir ja gerne die >cpp Datei anschauen wo die print Methode drin ist. Wozu? Das ist weder nötig noch auf deinen Anfängerniveau sinnvoll möglich. > Aber ich denke mal >das diese in der IDE "rein" programmiert sind und nicht als externe >Datei vorliegen. Oder? Nein, beim Arduino liegen alle Klassen als offener Quellcode vor.
Jaaaa, Es funktioniert nun. Ich habe mir vom Author des ersten Tutorial(das ich auch verlinkt habe) mir auf Github das nochmal genau angeschaut. Und nochmal nachprogrammiert. Nun funktioniert es Problemlos. https://github.com/tuupola/avr_demo/tree/master/blog/simple_usart
Nachprogrammiert? Nennt man das heute so beim kopieren und drei Zeichen ändern?
Kauf dir nen Buch ! z.Bsp Mikrocomputertechnik mit Controllern der Atmel AVR-Risc-Familie von Günter Schmitt. Das ist sehr gut erklärt, mit reinen kopieren lernst du nichts da du ewt. den Mist von anderen auch noch abschreibst und sowie so nicht verstehst was da passiert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.