-
        

Ergebnis 1 bis 3 von 3

Thema: PWM Rechteckbreite über den den Hyperterminal ändern

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.09.2011
    Beiträge
    23

    PWM Rechteckbreite über den den Hyperterminal ändern

    Anzeige

    Hiho,
    ich haette da ein recht fieses Problem was die C Programmierung meines AtMega 16 angeht.
    Ich möchte über das Senden von einem Befehl, von zum Bsp. 3 Zeichen Länge + Wert von 0-1023, die Rechteckbreite meiner PWM ändern, und die Änderung auf dem Oszi sehen.
    Die UART steht schon, die PWM auch, das Programm kann schon so einiges, zum Beispiel auf Befehl mir die Heizung an und ausmachen, Sensorwerte anzeigen lassen, etc.
    Aber nun hänge ich daran einer Variable erstmal zu sagen dass sie nur einen Wertebereich von 0 bis 1023 annehmen darf (diese wird dann irgendwo in der mainloop gesetzt mit
    zum bsp. pwm_rechteckbreite=OCR1A (OCR1A bestimmt die die Breite der PWM Rechtecke bei AtMega16).
    Und des weiteren weiss ich nicht wie ich das hinkriegen soll dass ich der UART sage:
    prb=255
    dass dann, diese die Breite tatsaechlich auf 255 aendert.

    Ich hab mal meine Quellcodes zu dem Programm, welches mittlerweile doch schon recht umfangreich ist hochgeladen.
    Ich hoffe meine Problematik ist verstaendlich und schonmal vielen Dank für Anregungen und Hilfe.
    Mit freundlichen Grüßen.
    Angehängte Dateien Angehängte Dateien

  2. #2
    Benutzer Stammmitglied Avatar von KR-500
    Registriert seit
    26.12.2007
    Alter
    22
    Beiträge
    91
    Hi,

    also ich gehe mal davon aus, dass deine Routine zum Empfangen funktioniert. Dann kannst du einfach die ersten vier Bytes von deinem Teststring nehmen ("prb=") und diese dann mit memcmp (http://www.cplusplus.com/reference/c...string/memcmp/) vergleichen. Sollte der String dann übereinstimmen, kannst du mit atoi() oder einer selbst geschriebenen Funktion den String in einen Integer umwandeln und dem Register zuweisen.

    Viele Grüße
    KR-500

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.09.2011
    Beiträge
    23
    Zitat Zitat von KR-500 Beitrag anzeigen
    Hi,

    also ich gehe mal davon aus, dass deine Routine zum Empfangen funktioniert. Dann kannst du einfach die ersten vier Bytes von deinem Teststring nehmen ("prb=") und diese dann mit memcmp (http://www.cplusplus.com/reference/c...string/memcmp/) vergleichen. Sollte der String dann übereinstimmen, kannst du mit atoi() oder einer selbst geschriebenen Funktion den String in einen Integer umwandeln und dem Register zuweisen.

    Viele Grüße
    KR-500
    Diesen Vergleich mach ich schon mit der strcmp Funktion das funktioniert auch ganz gut.

    Hab gerade noch ein viel schlimmeres (triviales?) Problem:
    Und zwar hat mein Betreuer eine Subset Funktion gebaut,
    die nach einem Leerzeichen schaut, wenn dieser in dem zu sendendem String vorhanden ist,
    wird dieser String an der Stelle des Leerzeichens getrennt, und der String vor dem Leerzeichen als str_1 ausgegeben,
    der nach dem Leerzeichen als str_2.
    Allerdings funktioniert das alles nicht so richtig, wenn ich das mit dem Terminal überprüfen möchte.

    Hab mal die 2 kritischen Code stellen hier in die code-tags gepackt:
    Code:
    while(1)
    	 {       
    			 
    	      	 if (uart_str_complete == 1)             //wenn der empfangene string komplett ist, dann
                 
    			 {
    			    if (strcmp( uart_str, "Hzgaus" ) == 0  ) //soll empfangene string mit "LED aus" vergliechen werden, wenn die gleich sind, dann
    				{
                      LED_PORT = 0;           //LED soll ausgehen
                      //uart_puts("aus");                   //und puts soll mir eben den Text rausgeben
                    }
    
                    if (strcmp( uart_str, "Hzgan" ) == 0 )  //wenn aber der empfangene String "LED an" heisst, dann
                    {
                     LED_PORT = 1;                 //dann soll die LED angehen
                     //uart_puts("ein");                         //und puts eben dazu
                    }
    				if (strcmp( uart_str, "snd")== 0) 			  			
     			    {	    
                    wert_ausgabe();
    				}
    				if (strcmp(uart_str, "xxx yyy")==0)
    				{
    			    //atoi (uart_str) ;		
                    strcpy(str_in, uart_str);
    				subset();
    				uart_puts(str_1);
    				uart_puts(str_2);
    				}								
    				uart_str_complete = 0;                          //das uart_str_complete wieder auf 0 setzen, damit die ISR weitere Dinge empfangen kann und nicht 
    			 }                                                  //dauernd zeug sendet		 
        }			 		     	  	
     }
    und die stringsubset funktion:

    Code:
    char str_in [10];
    char str_1 [10];
    char str_2  [10];
    
    void subset()
    {	
    	char index_in, index_out;
    	
    	index_in = 0;
    	index_out = 0;
    	while (str_in[index_in] != 0x20)
    	{
    		str_1[index_out] = str_in[index_in];
    		index_in++;
    		index_out++;
    	}
    	index_out = 0;
    	while (str_in[index_in] != 0x0a && str_in[index_in] != 0x0D)
    	{
    		str_2[index_out] = str_in[index_in];
    		index_in++;
    		index_out++;
    	}
    }
    Rest funktioniert.

    Grüße.

Ähnliche Themen

  1. hyperterminal und usb?
    Von exzoys im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 04.02.2011, 20:17
  2. Basicstamp an Hyperterminal
    Von Iguan im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 11.10.2009, 18:41
  3. Rds(on) in Pspice ändern/variieren - Modellparameter ändern?
    Von fraujansen im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 31.03.2009, 15:35
  4. Variablen über HyperTerminal angucken
    Von palermo im Forum C - Programmierung (GCC u.a.)
    Antworten: 78
    Letzter Beitrag: 26.01.2007, 17:37
  5. Fernsteuerung per Hyperterminal
    Von Asurokiller im Forum Asuro
    Antworten: 4
    Letzter Beitrag: 24.09.2006, 21:58

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •