Zitat von SprinterSB
Ok, danke...
Einzelne Buchstaben lassen sich nun ausgeben (z.B. mit ch1[2])...
Aber leider schaffe ich es noch nicht, dass er mir den gesamten String ausgibt...werde mal bisschen rum experementieren.
Zum einen gibt dir ch1 nur die Anfangsadresse des Strings (ist ein char*).Zitat von funky78
Die einzelnen Zeichen bekommst du mit
ch1[0], ch1[1], etc
Zudem ist dein String nicht 7, sondern 8 Zeichen lang!!! Da wird immer noch ne abschliessende '\0' als Stringende mit abgelegt.
Zitat von SprinterSB
Ok, danke...
Einzelne Buchstaben lassen sich nun ausgeben (z.B. mit ch1[2])...
Aber leider schaffe ich es noch nicht, dass er mir den gesamten String ausgibt...werde mal bisschen rum experementieren.
Für mehrere gehts in ner Schleife
Code:... const char * pc; for (pc = ch1; *pc != '\0'; pc++) { char zeichen = *pc; // zeichen ausgeben } ...
Ich glaube, ich bin wirklich zu doof...
Ich setze mal den Codeteil rein...
Was er mir ausgibt ist...Code:char ch1[9] = "CH1_OK\n"; char ch2[9] = "CH2_OK\n"; const char *pc; char zeichen; ... for (pc = ch1; *pc!= '\0';pc++) zeichen = *pc; UDR = zeichen; ...
neue Zeile...
Was mache ich falsch?
Entschuldigt bitte, wenn ich nerve...
Wie wär's mit {} um den Block in der for-Schleife?
Die sind nicht nur Deko
Und jedes Zeichen *übertragen*, nicht einfach alles in UDR reinrußen...warte bis der Puffer wieder leer ist.
Wie der UART arbeitet, steht auch vorzüglich im Manual beschrieben.
Code:const prog_char *pc; for (pc = ch1; *pc!= '\0';pc++) { zeichen = *pc; // Warten bis der Sendepuffer frei ist while ( !( USR & (1<<UDRE)) ) ; UDR = zeichen; }
![]()
![]()
Kjion...SprinterSB...
Tausend dank...mir fehlen wirklich die Worte...vielen vielen Dank...
Wenn der Code mal da steht, ist es einleuchtend...aber ganz ohne Code leuchtet bei mir leider nicht viel
![]()
Hallo...
habe ein Problem mit meiner Interruptroutine.
An PD3 hatte ich zuvor einen Schalter gegen Masse. Diesen habe ich nun durch einen Taster ersetzt, was mir dann Probleme bereitete.
Vielleicht sollte ich schreiben, was ich machen wollte.
Drücke ich den Taster soll der Zustand 1 aktiviert werden. Drücke ich ihn nochmal, soll der Zustand 2 aktiviert werden.
Das läuft auch soweit recht gut.
Das Problem ist, dass der Taster prellt...die Zustände ändern sich. Habe bereits einen Kondensator und einen Wiederstand zur Entprellung eingelötet. Ist besser geworden, aber das Problem gibt es zwischen durch immer wieder.
Als der Schalter drin war, konnte ich den Zustand abfragen, entweder war er High oder Low, und dann eine simple Warteschleife (zur Entprellung) einbauen. Aber beim Taster geht das doch nicht so einfach (bzw. kriege ich es nicht hin), weil ja jedes mal mit dem Zustand Low geschaltet wird, und der Taster leider auch beim loslassen prellt.
Wie kann ich dieses Problem lösen? Bin über jeden Hinweis dankbar...
Ich füge eben auch mal den Code ein...
[-o<Code:#include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> unsigned int status_taster=1; // Status beim Eintritt in Interruptroutine void Inter(); // Interrupt funktion int main() { DDRB = 0b11111111; // PORTB als Ausgang definieren PORTB = 0b00011000; // PORTB setzen DDRD = 0b11110110; // PD0 und PD3 als Eingang definieren PORTD = 0b11111111; Inter(); for (;;) {} } void Inter() { MCUCR = 0b00001000; // Flanke definieren GIMSK = 0b10000000; // Enable interrupt sei(); // Interrupt freigeben } SIGNAL(SIG_INTERRUPT1) // Taster an PD3 löst Interrupt aus { if(status_taster==1) { PORTB |= (1<<PB3); /*Setzt PB3 HIGH...LED aus \ */ PORTB &= ~(1<<PB4); //Setzt PB4 LOW...LED an } Zustand 1 PORTD |= (1<<PD5); //Setzt PD5 HIGH / status_taster=2; } else { PORTB &= ~(1<<PB3); /*Setzt PB3 LOW...LED an \ */ PORTB |= (1<<PB4); //Setzt PB4 HIGH...LED aus } Zustand 2 PORTD &= ~(1<<PD5); //Setzt PD5 LOW / status_taster=1; } GIFR=0; }
Hi,
http://www.mikrocontroller.net/forum/read-4-20549.html
http://www.mikrocontroller.net/forum/read-4-16594.html
Das sollte dir weiterhelfen
MfG Kjion
Hallo nochmals...Zitat von Kjion
Habe mir mal alles ausgedruckt und in Ruhe angeschaut...
Den kürzesten Code wollte ich dann auch verstehen...was mir wohl nicht besonders gelungen ist.
Wo muss ich diesen Code unterbringen?
In die Interruptroutine oder als eigene Funktion hinstellen?
Wenn nicht Interruptroutine, woher weiß dann der uC das dieser zum Interrupt mit dem Taster gehört?
Der Taster wird doch nicht abgefragt, oder?
#pragma cd pl (9999) ....hmmm, was das wohl zu bedeuten hat...
#include <reg51.h> .... da müsste wohl bei mir was anders stehen...
void to_int(void) interrupt INT_T0...ich denke, mit der Zeile wird irgendwie der Bezug zur Interruptroutine gemacht.
In den ganzen Artikeln zur Entprellung war stets eine Rede von Timer...dieser ist doch nicht in diesem Code, oder?
Vielleicht sollte ich das ganze doch wirklich aufgeben...oder ich sitze nun wirklich zu lange vor meinem PC und sehe den Wald vor Bäumen nicht mehr...
![]()
Lesezeichen