- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 17

Thema: USART simulieren im Atmelstudio6

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2014
    Beiträge
    10

    USART simulieren im Atmelstudio6

    Hallo,

    ich bin nach etlichen Jahren Abstinenz wieder zum MCU Programmieren gekommen.
    Ich habe die letzten Jahre vorwiegend Elektronikschaltungen entwickelt und programmieren "lassen".
    Früher habe ich selber meistens mit Microchip und in Assembler gearbeitet, leider nur wenig mit den Atmels und dem AVR Studio 4.

    Leider habe ich meine C Kenntnisse nie so wirklich gepflegt bzw. ausgebaut (ich hatte ja einen Programmierer).
    Jetzt wollte ich das nachholen und habe mir das Atmelstudio6 zugelegt.
    Leider sieht das alles etwas ungewohnt aus und ich komme nicht wirklich voran.

    Ich wollte für ein kleines Heimprojekt (Haus Bus zum Üben) eine „minimale“ Kommunikation über eine RS485 Hardware realisieren.
    Als MCU habe ich mir den ATMega64 ausgeguckt, und schon ein klein wenig Code geschrieben.

    Da ich noch keine Hardware zum Üben habe wollte ich das mal mit dem Simulator durchtesten.

    Ich komme aber nie in die ISR (der Breakpoint wird nie erreicht).
    Den Registereintrag RXC0 kann ich zwar setzen, aber zur ISR führt das nicht.

    Was mache ich falsch? Geht das überhaupt?
    Das UDR0 kann ich auch nicht beschreiben um dort etwas zu sehen.

    Über Hilfe würde ich mich freuen.
    Bitte aber berücksichtigen, dass ich mit C üblichen Vorgehensweisen noch nicht so vertraut bin.


    Code:
    #include <avr/io.h>
    #include <avr/iom64.h>
    #include <stdio.h>
    #include <avr/interrupt.h>
    
    /*	F_CPU = 16000000UL	MCU Frequenz 16MHz externes Quarz 
    	global gesetzt unter AVR/GNU C Compiler - Symbols*/
    
    #define USART_BAUD_RATE 9600							//gewünschte Baudrate
    
    #define USART_BAUD_CALC (F_CPU/(USART_BAUD_RATE*16L)-1)      //berechnet Registerwerte für Baudrate
    
    #define LOW(x) ((x) & 0xFF)			                                      //LOW-Byte
    #define HIGH(x) (((x) >> 8) & 0xFF)	                                              //HIGH-Byte
    
    volatile uint8_t data=0x00;			                                              //nur zum Anschauen im Watch
    
    ISR (USART0_RX_vect)				                                      //Interrupt wenn empfang abgeschlossen
    {
    	data=UDR0;
    	UDR0=data;
    	
    }
    
    
    
    int main(void)
    {									
    	
    	
    	DDRA=0b00000000;
    	DDRB=0b11111111;
    	DDRC=0b11111111;
    	DDRD=0b10111011;
    	DDRE=0b10111110;
    	DDRF=0b11111111;
    	DDRG=0b11111;
    	
    	
    	UBRR0H = HIGH(USART_BAUD_CALC);					//Setzen des HIGH-Byte vom USART-Register für Baudrate
    	UBRR0L = LOW (USART_BAUD_CALC);					//Setzen des LOW-Byte vom USART-Register für Baudrate
    
    	UCSR0B = (1<<RXEN0) | (1<<TXEN0) | (1<RXCIE0);	               //Empfangen, Senden und Empfangsinterrupt aktivieren
    	UCSR0A = (1<<MPCM0);							       //Bit zur "SLAVE" Kennzeichnung !/nur Adressen ansehen, Daten ignorieren							
    	
    	//Codierungsbits abfragen und RRS485-ID Adressierung festlegen
    	
    	
    	sei();											       //Interruptfreigabe
    	
    	
    	while(1)
    	{
    
    					
    			PORTG  =0b10101;				//setzt Port G Bitmuster		nurm zum Anschauen im IO View				
    			PORTG ^=(1<<PG1);				//toggelt Port G Bit 1
    			
            }
    	
    }

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2014
    Beiträge
    10
    Hallo,?

    Hat denn keiner eine Idee?

    Ich wäre sehr froh wenn sich mal jemand meldet.
    Hits habe ich schon eine Menge, aber noch keine Antworten.

    Gruß an alle

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.02.2005
    Ort
    München
    Alter
    39
    Beiträge
    389
    Kommunikation zu Simulieren ist immer schwierig mit dem Simulator. Das die ISR aufgerufen wird müsstest du das Interrupt-Flag händisch aktivieren.
    Aber du kannst ja mit anderen Sachen mal starten und wenn die Hardware da ist mit der UART Schnittstelle weiter machen.

    Kleiner Tipp


    Code:
    DDRD=0b10111011;
    so würde ich das nicht schreiben ist einfach unübersichtlich.
    lieber

    Code:
    DDRD = (1<<PD7)|(1<<PD5)|(1<<PD4)|(1<<PD3)|(1<<PD1)|(1<<PD0);
    Dauert zwar länger zum schreiben, aber liest sich viel schneller als Bits zählen

    Sonst sieht eigentlich ganz gut aus für den Anfang.


    Gruß Matthias

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2014
    Beiträge
    10
    Danke für den Tipp mit der Bit Zählerei (da hab ich mich schon öfter verzählt ).

    Das Flag händisch zu setzen hatte ich schon versucht. Hat nichts gebracht.

    Ich habe schon begonnen mir Gedanken über den Rest zu machen (Aufbau des Protokolls, FIFO-Register usw.).
    Ist ne zähe Sache, wenn man nebenbei erst noch C (neu) lernen muss.

    Gruß Marcus

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.02.2005
    Ort
    München
    Alter
    39
    Beiträge
    389
    Fang erst mal klein an. LEDs an/aus, Taster, Timer, PWM, ... . So kannst du dich schrittweise einarbeiten und an die C Syntax gewöhnen.. Wenn du zu komplex startest wirst du früher oder später frustriert aufgeben.

    Gruß Matthias

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von marcus.m Beitrag anzeigen
    Das Flag händisch zu setzen hatte ich schon versucht. Hat nichts gebracht.
    Debug -> Options and Settings -> Tools -> Tool Settings -> Mask interrupts while stepping


    BTW:
    Code:
    #include <AVR/iom64.h>
    Dies hat in deinem Code nichts zu suchen. Du inkludierst immer nur <avr/io.h>.
    MfG
    Stefan

Ähnliche Themen

  1. Asuro Simulieren
    Von robo.fr im Forum Asuro
    Antworten: 42
    Letzter Beitrag: 05.02.2014, 22:38
  2. NiboBee simulieren
    Von robo.fr im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 1
    Letzter Beitrag: 01.06.2010, 14:25
  3. Regelstrecke simulieren
    Von Wüstenblume im Forum Elektronik
    Antworten: 14
    Letzter Beitrag: 05.06.2008, 21:58
  4. Luftströmung simulieren
    Von Black Scorpion im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 24.04.2008, 15:25
  5. Kinematik Simulieren
    Von BlackDevil im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 12
    Letzter Beitrag: 25.12.2007, 17:55

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests