- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 60

Thema: C-Programm mit einfachen Funktionen für AT90S2313

  1. #21
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Anzeige

    Powerstation Test
    Die Anpassung ist aber ganz einfach:
    http://www.kreatives-chaos.com/code/2313_uart.c

    Habs aber nicht geteset ...

    MfG Kjion

  2. #22
    Benutzer Stammmitglied
    Registriert seit
    07.07.2005
    Beiträge
    32
    Code:
    	static uint8_t state = 0;
    	
    	// empfangenes Zeichen auslesen
    	uint8_t buffer = UDR;
    	
    	switch (state) 
    	{
    		case 0:
    			if (buffer == '<') 
    			{
    				state = 1;
    			}
    			else state = 0;
    			break;
    		
    		case 1:	
    			if (buffer == 'C') 
    			{
    				state = 2;
    			}
    			else state = 0;
    			break;
    		
    		case 2:
    			if (buffer == 'H') 
    			{
    				state = 3;
    			}
    			else state = 0;
    			break;
    		
    			
    		case 3:
    			if (buffer == '1') 
    			{
    				state = 4;
    			}
    			else state = 0;
    			break;
    		
    		case 4:	
    			if (buffer == '>') 
    					{	
    					PORTD = 0b11011111; 
    					PORTB = 0b11110111; 
    				//	PORTB &= ~(1<<PB3);
    				//	PORTB |= (1<<PB4);
    				//	PORTD &= ~(1<<PD5);
    					
    					p_string = ch1;
    					USR |= (1<<UDRE);
    					}
    					else state = 0;
    					break;
    				
    		case 5:
    			if (buffer == '2')
    				{
    				state = 5;
    				}
    				else state = 0;
    				break;
    		case 6:		
    			if (buffer == '>') 
    					{	
    					PORTD = 0b11111111; 
    					PORTB = 0b11101111; 
    				//	PORTB |= (1<<PB3);
    				//	PORTB &= ~(1<<PB4);
    				//	PORTD |= (1<<PD5);
    					
    					p_string = ch2;
    					USR |= (1<<UDRE);
    					}
    				else state = 0;
    				break;
    		default:
    			state = 0;	
    	}

    In case 3 prüft er ja, ob 1 kommt, und wenn nicht, geht er auf 0 zurück. D.h. ich komme nie in case 4 rein.
    in case 3 das else state=0 entfernen hat mich leider auch nicht weiter gebracht.

    Wie kann ich ihm bei bringe, dass er sowohl nach einer 1 als auch nach einer 2 ausschau halten soll, und dem entsprechend weiter vorgehen soll?


  3. #23
    Benutzer Stammmitglied
    Registriert seit
    07.07.2005
    Beiträge
    32
    Zitat Zitat von Kjion
    Die Anpassung ist aber ganz einfach:
    http://www.kreatives-chaos.com/code/2313_uart.c

    Habs aber nicht geteset ...

    MfG Kjion
    Probiere ich eben mal aus...

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    07.07.2005
    Beiträge
    32
    Code:
    {
    	static uint8_t state = 0;
    	static uint8_t channel = 0;
    	
    	// empfangenes Zeichen auslesen
    	uint8_t buffer = UDR;
    	
    	switch (state) 
    	{
    		case 0:
    			if (buffer == '<') 
    			{
    				state = 1;
    			}
    			else state = 0;
    			break;
    		
    		case 1:	
    			if (buffer == 'C') 
    			{
    				state = 2;
    			}
    			else state = 0;
    			break;
    		
    		case 2:
    			if (buffer == 'H') 
    			{
    				state = 3;
    			}
    			else state = 0;
    			break;
    		
    			
    		case 3:
    				channel = buffer;
    				state = 4;
    			
    			break;
    		
    		case 4:	
    			if (buffer == '>') 
    					if (channel == '1')
    					{	
    					PORTD = 0b11011111;
    					PORTB = 0b11110111;
    					
    					p_string = ch1;
    					USR |= (1<<UDRE);
    					}
    					
    					if (channel == '2')
    					{
    					PORTD = 0b11111111;
    					PORTB = 0b11101111;
    					
    					p_string = ch2;
    					USR |= (1<<UDRE);
    					}
    			else state = 0;
    				break;
    		default:
    			state = 0;	
    	}
    Funktioniert leider auch nur einmal...bleibt in CH2 hängen.
    Wenn ich uC resete, dann <CH1> eingebe, wechselt er...
    Wenn ich jetzt <CH2> eingebe, wechselt er auch...
    Und von hier an hängt er...

    Wenn ich nach dem Reset mit <CH2> anfange hängt er sich gleich auf...

  5. #25
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Code:
    {
    	static uint8_t state = 0;
    	static uint8_t channel = 0;
    	
    	// empfangenes Zeichen auslesen
    	uint8_t buffer = UDR;
    	
    	switch (state) 
    	{
    		case 0:
    			if (buffer == '<') 
    			{
    				state = 1;
    			}
    			else state = 0;
    			break;
    		
    		case 1:	
    			if (buffer == 'C') 
    			{
    				state = 2;
    			}
    			else state = 0;
    			break;
    		
    		case 2:
    			if (buffer == 'H') 
    			{
    				state = 3;
    			}
    			else state = 0;
    			break;
    		
    			
    		case 3:
    				channel = buffer;
    				state = 4;
    			
    			break;
    		
    		case 4:	
    			if (buffer == '>') {
    					if (channel == '1')
    					{	
    					PORTD = 0b11011111;
    					PORTB = 0b11110111;
    					
    					p_string = ch1;
    					USR |= (1<<UDRE);
    					}
    					
    					if (channel == '2')
    					{
    					PORTD = 0b11111111;
    					PORTB = 0b11101111;
    					
    					p_string = ch2;
    					USR |= (1<<UDRE);
    					}
    			}
    			state = 0;
    			break;
    		default:
    			state = 0;	
    	}
    Du solltest dem Code noch eine Klammer mehr spendieren, dann sollte das auch gehen...

  6. #26
    Benutzer Stammmitglied
    Registriert seit
    07.07.2005
    Beiträge
    32
    Tschuldigung, alles wieder zurück...

    Habe den Fehler entdeckt...

    Ich muss nach Case 4 wieder zurück auf state=0, sonst hängt er ja eben an diesem Punkt.

    Ach ja, nochmals vielen Dank für die Unterstützung...

  7. #27
    Benutzer Stammmitglied
    Registriert seit
    07.07.2005
    Beiträge
    32
    Zitat Zitat von Kjion
    Du solltest dem Code noch ein Klammer mehr spendieren, dann sollte das auch gehen...
    Danke...habe ich ergänzt...

  8. #28
    Benutzer Stammmitglied
    Registriert seit
    07.07.2005
    Beiträge
    32
    Hallo nochmals,

    darf ich eigentlich weiter nerven, oder habe ich mein Kontingent erreicht? [-o<

  9. #29
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Solange dir noch jemand antwortet scheint's noch nicht so weit zu sein

  10. #30
    Benutzer Stammmitglied
    Registriert seit
    07.07.2005
    Beiträge
    32
    Zitat Zitat von Kjion
    Solange dir noch jemand antwortet scheint's noch nicht so weit zu sein
    Ich interpretiere das mal eben als ein ja

    Derzeit habe ich noch probleme mit der Rückmeldung.
    Der Controller sollte mir ja zurück geben, in welchem Zustand er jetzt ist.

    So wie es in dem Code war hat es ja irgendwie nicht geklappt.

    Ok, eine allgemeine Frage.

    Ist es nicht möglich, einen string in Form eines Arrays zu definieren und das dann mit UDR auszugeben?

    char ch1[7] = "CH1_OK\n"

    und dann an der nötigen Stelle es auf zu rufen...

    UDR = ch1;

    Wo habe ich meinen Denkfehler?

    Du hattest ja in deinem Code (wenn ich die avr-lib nicht falsch verstanden habe) Pointer drin.

    Vielleicht noch zu erwähnen, in dem jetztigen Zustand gibt er mir ein Dreickchen oder einen dichen Strich zurück...

Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test