- Akku Tests und Balkonkraftwerk Speicher         
Seite 5 von 7 ErsteErste ... 34567 LetzteLetzte
Ergebnis 41 bis 50 von 66

Thema: Programm_Anpassungen

  1. #41
    Benutzer Stammmitglied
    Registriert seit
    09.07.2007
    Beiträge
    42
    Anzeige

    Powerstation Test
    Hallo,

    ich habe an Euch eine große Bitte: Kann jemand das folgende Programm (nur kurz!) testen?
    Es müsste (besser: sollte! ) nach dem Laden blinken, dann 10 Zeilen mit a ... z zum PC senden.
    Die Prog.-Frakmente stammen noch von der "Urversion".
    Code:
    /* test.c
       Test zum Senden - asuro.h + -.c verkleinert und SerWrite(j) angepasst!
       Programm soll 10 Zeilen mit a ... z senden.
       SerWrite() enthaelt nur "wenn Speicher leer, dann senden"! */
    
    #include "asuro.h"
    
    int main(void)
    {
    	unsigned char i, j;
    	Init();
    	for(i=0;i<200;i++)
    	{
    	  for(j=0;j<20;j++) Sleep(0xFF);
    	  StatusLED(RED);
    	  for(j=0;j<20;j++) Sleep(0xFF);
    	  StatusLED(GREEN);
    	}
    	UCSRB |= 0x08;		// Sender ein
    	UCSRA |= 0x40;		// 'clear' transmitter flag 
    	for(i=1;i<11;i++)
    	{
    	 for(j='a';j<='z';j++)
    	 {
    	  SerWrite(j);
    	 }
    	 SerWrite('\n');
    	 SerWrite('\r');
    	}
    	while (!(UCSRA & 0x40))
    	;			// warten bis Uebertragung fertig
    	UCSRB &= ~0x08;		// Sender aus
    	StatusLED(YELLOW);
    	while(1)
    
    	;
    	return 0;
    }
    ---------------
    /* asuro.c */
    #include "asuro.h"
    
    volatile unsigned char count72kHz;
    
    SIGNAL (SIG_OUTPUT_COMPARE2)
    {
    	count72kHz ++;
    }
    
    void Init (void)
    {
    	TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
    	OCR2  = 0x6E; 
    	TIMSK |= (1 << OCIE2); 
    
    	UCSRA = 0x00;
    	UCSRB = 0x00;	
    	UCSRC = 0x86; 
    	UBRRL = 0xCF; 
    
    	DDRB = IRTX | LEFT_DIR | PWM | GREEN_LED; 
    	DDRD = RIGHT_DIR | FRONT_LED | ODOMETRIE_LED | RED_LED;
    
    	TCCR1A = (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1);
    	TCCR1B = (1 << CS11);
    
    	//ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); 
    
    	StatusLED(GREEN);
    
    	sei();
    }
    
    inline void StatusLED(unsigned char color)
    {
    	if (color == OFF)    {GREEN_LED_OFF; RED_LED_OFF;}
    	if (color == GREEN)  {GREEN_LED_ON; RED_LED_OFF;} 
    	if (color == YELLOW) {GREEN_LED_ON; RED_LED_ON;}
    	if (color == RED)    {GREEN_LED_OFF; RED_LED_ON;}
    }
    
    void SerWrite(unsigned char data)
    {
    	while(!(UCSRA & 0x20))
    	;
    	UDR = data;
    }
    
    void Sleep(unsigned char time72kHz)
    {
    	count72kHz = 0;
    	while (count72kHz < time72kHz);
    }
    FirstTry.zip (enthält alle files) beigeschlossen!

    Auswertung: Kommen _nicht_ alle Zeichen an, dann sollte man 'was ändern!)

    Vielen Dank schon 'mal im voraus!
    cu Helmut

    PS: Heute morgen konnte ich sehr über diverse Artikel lachen!
    Angehängte Dateien Angehängte Dateien

  2. #42
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    UCSRA |= 0x40; // 'clear' transmitter flag
    TXC sollte besser mit = gelöscht werden. Mit |= werden zufällig auch noch gesetzte Flags mitgelöscht!

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #43
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    nein, gerade nicht! wenn man mit = schreibt, wird das ganze register überschrieben.


    oder war das gerade das ziel, weil ja mit ner 1 grlöscht wird? hmm...

    wäre btw ein gute grund warum gerade mit ner 1 das bit entfernt wird..
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  4. #44
    Benutzer Stammmitglied
    Registriert seit
    09.07.2007
    Beiträge
    42
    Hi,

    interessant ist, dass ich ein ZIP-file mit reingestellt habe, das jetzt weg ist!?

    Also nochmals das Ganze!

    Vielleicht könnt Ihr bitte das ganz kurze Prog. 'mal testen.

    Danke!

    cu Helmut
    Angehängte Dateien Angehängte Dateien

  5. #45
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    das tip file ist noch da (bei mir zumindest). du musst allerdings eingeloggt sein um es zu sehen.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  6. #46
    Benutzer Stammmitglied
    Registriert seit
    09.07.2007
    Beiträge
    42
    Vielen Dank!
    cu Helmut

    PS: Man lernt einfach :immer_ noch 'mal was hinzu!

  7. #47
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo helmut_w,
    ja, ich traue mich noch
    Auch ich konnte aus beiden Beiträgen downloaden. Habe aber noch nichts getestet.
    Ich stimme damaltor zu, auch ich würde das |= stehen lassen.

    Was ich aber noch in der Doku gefunden habe (ja, das Thema ist gegessen, auch ohne Prinzenrolle!) ist folgendes:

    Seite 12/13 Reset and Interrupt Handling
    Interrupt Flags can also be cleared by writing a logic one to the flag bit position(s) to be cleared.
    Dies gilt scheinbar für jedes Flag, welches einen Interrupt auslösen kann. Ausnahme eventuell beim SPIF-Bit.

    Seite 22 I/O Memory
    Some of the Status Flags are cleared by writing a logical one to them.
    Ich habe kein Liste gefunden, welche Flags es denn nun genau sind. Immer nur bei den einzelnen Flags, gibt es einen 'versteckten' textuellen Hinweis.

    Seite 46 General Interrupt Control Register - GICR
    When the IVSEL bit is cleared (zero), ...
    Bei diesem Bit ist als einzige Stelle tatsächlich mal mit (zero) ein Hinweis auf ein 'gecleardes' Bit, dass es dann '0' ist gegeben.
    BRAVO an damaltor, der sich getraut hat diesen Sachverhalt hier zu posten. (Wer setzt den schon ein Bit auf '1' um es auf '0' zu setzen?)

    Seite 283 Register Summary (Continued)
    Note:
    3. Some of the Status Flags are cleared by writing a logical one to them
    Note that the CBI and SBI instructions will operate on all bits in the I/O Register,
    writing a one back into any flag read as set, thus clearing the flag.
    The CBI and SBI instructions work with registers 0x00 to 0x1F only.
    Hier hört mein Englisch tatsächlich auf. Die weitere Erklärung von CBI und SBI mit 'read as set' kann ich tatsächlich nicht mehr umsetzen.
    Lieber Asuro programieren als arbeiten gehen.

  8. #48
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    das bedeutet folgendes:
    mit CBI und SBI kann man in assembler einzelne bits setzen (Set BIt) oder löschen (Clear BIt).

    das bedeutet allerdings nicht , dass die erforderliche aktion getan wird um es zu löschen, sondern mit sbi wird eine 1 geschrieben, und mit cbi wird eine null geschrieben.

    diese beiden befehle funktionieren nur mit den ersten 32 registern (0x00 bis 0x1F), das sind allgemeine statusregister und zB die von den Portpins.

    Note that the CBI and SBI instructions will operate on all bits in the I/O Register,
    writing a one back into any flag read as set, thus clearing the flag.

    das ist extrem wichtig: es bedeutet, wenn du ein register ausliest, und dann wieder an die gleiche stelle schreibst, werden alle interrupt flags gelöscht (wenn du eine 1 liest, und dann an die stelle ne 1 schreibst, wird das bit gelöscht... is klar soweit, aber leicht zu vergessen wenn man zB den inhalt eines registers sichern will un es später zurückschreibt.)
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #49
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    nein, gerade nicht! wenn man mit = schreibt, wird das ganze register überschrieben.
    Wenn man mit = arbeitet, wird nur das angesprochene Bit gelöscht, alle anderen werden mit 0 überschrieben und dadurch nicht beeinflußt. Mit |= werden auch andere Flags mitgelöscht, wenn sie zufällig genau zu diesem Zeitpunkt auch gesetzt(=1) sind!

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #50
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    aaaaaaaaaaaahhhh... richtig =)

    vermutlich ist darum auch das löschen mit 1 eingestellt worden... macht sinn.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 5 von 7 ErsteErste ... 34567 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress