- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: Atxmega PortIn wird nicht ausgewertet, nur im Einzelschritt

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.04.2010
    Beiträge
    61

    Atxmega PortIn wird nicht ausgewertet, nur im Einzelschritt

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen,

    ich brauche euere Hilfe, bin total verzweifelt.
    Es geht um eine Auswertung auf einem Atxmega

    Code:
    void datenAbrufen(){			
    	while ((PORTC_IN & (1<<PIN_DATA)) > 0) { //warten bis DATA low
    	}
    	_delay_us(30);
    	int i = 0;
    	long ergebnis1 = 0;
    	PORTC_DIRSET |= (1<<PIN_SCK); //Wenn Daten vorhanden SCK auf Ausgang schalten 
    	for(i=0; i<26; i++){ //MSB abrufen
    		PORTC_OUTSET |= (1<<PIN_SCK); //Clock setzen         <--- wenn Breakpoint ab hier gesetzt und Einzelschritt werden die Ports richtig ausgewertet
    		_delay_us(10);
    		if (PORTC.IN & 0x04){
    			ergebnis1 |= 1;
    		}else{
    			ergebnis1 |= 0;
    		}
    		ergebnis1 = (ergebnis1 << 1);
    		_delay_us(1);
    		PORTC_OUTCLR &=  (1<<PIN_SCK); //Clock rücksetzen
    	}
    	
    	PORTC_OUTSET |= (1<<PIN_SCK); //Clock setzen
    	PORTC_OUTCLR &=  (1<<PIN_SCK); //Clock rücksetzen
    	PORTC_DIRCLR &= (1<<PIN_SCK); //SCK
    	
    	GewLOW = ergebnis1 & 0xFF;
    	GewMIB = (ergebnis1 & 0xFF00) >> 8;
    	GewMSB = (ergebnis1 & 0xFF0000) >> 16;	
    }
    mein Problem:
    läuft der Code ohne Breakpoint durch bleibt ergebniss1 also der Portin immer 0,
    wenn ich aber einen Breakpoint setze und im Einzelschritt durchlaufe funktioniert alle und ich sehe auch dass in den Registern 1 steht...
    Hatt jemand eine Idee an was sowas liegen kann?

    Schon mal danke im voraus!

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

    PORTC_OUTCLR &= (1<<PIN_SCK); //Clock rücksetzen

    Im Gegensatz zum ATMega wird beim XMega ein Ausgangsbit zurückgesetzt indem man das entsprechende Bit im Outclear-Register setzt:

    PORTC_OUTCLR = (1<<PIN_SCK); //Clock rücksetzen

    Beim normalen Mega geht das so:

    PORTC &= ~(1<<PIN_SCK); //Clock rücksetzen

    Vorteil: Der Port muss nicht erst gelesen werden um das entsprechende Bit dann ausblenden und rücksetzen zu können.

    Gruß

    mic

    http://leoninstruments.blogspot.de/2...-ports-04.html
    https://www.mikrocontroller.net/topic/289229

    P.S.: Das gilt natürlich für alle Set/Clear-Funktionen der Ports. Es ist schon spät...
    Geändert von radbruch (28.10.2016 um 00:16 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    wie radbruch schon schrieb, die set und clr register werden nur mit den bits angestuert die du schalten möchtest, die Zeilen

    PORTC_OUTSET |= (1<<PIN_SCK);
    und
    PORTC_DIRSET |= (1<<PIN_SCK)

    sind ebenfalls falsch, sollte aber nicht das Problem erklären, man sollte es nur nicht zur Gewohnheit machen mit |= bei den Registern zu arbeiten

    ich vermute mal dass dein SCK Pin nur einmal high geht und nie weider low, daher wertest du imer nur das erste bit aus

    PPS: wenn dir das mit den set und clr registern zu ungeheuer ist kannst du auch die normalen OUT register wie früher benutzen, kostet halt nur ein paar takte mehr zeit
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    24.04.2010
    Beiträge
    61
    Danke für die Tipps. Werde ich heute Abend gleich mal testen.

Ähnliche Themen

  1. TWI_BTR wird nicht 1
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 12.09.2011, 19:34
  2. USB IR-Transceiver wird nicht erkannt!
    Von Ectorkiller im Forum Asuro
    Antworten: 16
    Letzter Beitrag: 29.04.2011, 20:07
  3. Pro-Bot 128 wird von der IDE nicht erkannt
    Von Kosmogoniker im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 7
    Letzter Beitrag: 02.02.2011, 18:49
  4. ATxmega Einstieg will nicht so recht
    Von Ceos im Forum C - Programmierung (GCC u.a.)
    Antworten: 26
    Letzter Beitrag: 02.12.2009, 11:41
  5. Antworten: 25
    Letzter Beitrag: 21.08.2008, 23:33

Berechtigungen

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

Labornetzteil AliExpress