- fchao-Sinus-Wechselrichter AliExpress         
Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 54

Thema: Ansteuerung von Funkmodul RFM12

  1. #21
    Benutzer Stammmitglied
    Registriert seit
    29.04.2008
    Beiträge
    49
    Anzeige

    Praxistest und DIY Projekte
    hi

    also mehr als du in deinem post einstellst muss man nicht einstellen oder wie?
    ok dann muss ich jetzt nur noch die übertragungsfunktion haben!

    kannst du mir etwas genauer beschreiben wofür sbi und cbi gut sind?
    kenn das nämlich noch nicht!

    gruß Grandalf

  2. #22
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    @Grandalf
    sbi und cbi sind Assembler Befehle.
    sbi = Set Bit in IO
    cbi = Clear Bit in IO
    Die Befehle dienen zum direkten Setzen, bzw. Löschen von einzelnen Bits in Port Registern.
    Siehe auch das Datenblatt des gewünschten Controllers ziemlich weit hinten.

  3. #23
    Benutzer Stammmitglied
    Registriert seit
    29.04.2008
    Beiträge
    49
    ok also wenn ich das nun richtig deute muss ich nun einen takt erzeugen und dann die initialisierungs bytes (2bytes pro einstellung) per sbi und cbi bit für bit in den MOSI eingeben (pro takt 1bit) um mein RFM12 zu konfigurieren

    hört isch aber ziemlich kompliziert an oder?
    ich mein woher weiß ich wie schnell der takt sein muss und woher weiß ich das ich nicht einen takt ausversehen üerspringe
    oder funktioniert da ganze über den CLK

    um ehrlich zu sein bin ich gerad verwirrt

  4. #24
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    funktioniert da ganze über den CLK
    So ist es.
    Du aktivierst den Enable Eingang des RFM ( der heisst meines Wissens nSEL ) . Dann legst Du das erste Bit deines zu Übertragenden Bytes an den Din Eingang deines RFM. Nun Setzt due den Takt Eingang deines RFM auf High und gleich wieder auf Low ( pass auf, der Compiler könnte diese Befehlsfolge wegoptimieren ! ) .
    Jetzt das 2te Bit des Bytes anlegen und wieder einen CLK Impuls erzeugen.
    Das Spielchen geht so lange weiter bist alle Bits in das RFM eingeschoben wurden. Danach wird die nSEL Leitung wieder deaktiviert und fertig ist der Lack. Das Ganze funktioniert wie ein Schieberegister mit seriellem Eingang.
    Daten anlegen - Schiebetakt anlegen - Daten + 1 anlegen - Schiebetakt anlegen ...
    Ich meine das ist eigentlich nicht sonderlich schwer zu verstehen.
    Sollte der Schiebetakt zu schnell sein ( Datenblatt des RFM ) kann man noch ein paar "NOP" Befehle zwischen dem Setzen und löschen des CLK Pins einfügen.

    Eine Besonderheit gibt es noch, wenn man Daten für die Funkstrecke über Din einspeist. Dabei muss man auf das Timing achten ( Timer oder Interrupt des RFM verwenden ) und es dürfen keine ! CLK Impulse generiert werden. Dieser Modus ist nicht SPI kompatibel, deshalb halte ich es auch für sinnvoller eine Software SPI zu verwenden, auch wenn das ein wenig Rechenleistung kostet.

  5. #25
    Benutzer Stammmitglied
    Registriert seit
    29.04.2008
    Beiträge
    49
    ok dann hab ichs verstanden, denke ich

    nur dein letzter absatz war nicht sehr verständlich, aber naja ich meld mich wenn sich was neues ergibt

  6. #26
    Benutzer Stammmitglied
    Registriert seit
    29.04.2008
    Beiträge
    49
    hallo nochmal habe jetzt mal einen kleinen code geschrieben
    aber wie ich schon dachte funktioniert er nicht

    vllt schau sich das ja mal jemand von euch an

    also hier meine rfm12.c

    Code:
    #ifndef F_CPU 
    #define F_CPU 4000000L	//Controllerfrequenz für die util/delay.h
    #endif
    #include <avr/io.h>
    #include <avr/iom16.h>
    #include <util/delay.h>
    #include <inttypes.h>
    #include <math.h>
    #include "RFM12.h"
    
    
    #define SCK PB7
    #define MOSI PB5
    #define SS PB4
    #ifndef SPI
    #define SPI PINB
    #endif
    #ifndef MISO
    #define MISO PINB6
    #endif
    #define DCLK PIND3
    #define nIRQ PIND2
    
    void senden_mit_rfm12(int wert)
    {
    	int werte_array[16];
    	int pruefung=wert;
    	int i=0;
    	for(i = 0; i<=15; i=i+1)
    	{
    		pruefung=pruefung - pow(2,i);
    		if (pruefung >=0)
    		{
    			werte_array[i]=1;
    		}
    		else
    		{
    			pruefung=pruefung + pow(2,i);
    			werte_array[i]=0;
    		}
    	}
    
    	while(!(PIND & (1<<nIRQ)))
    	{
    
    	}	
    
    	int j=0;
    	for(j = 0; j<=15; j=j+1)
    	{
    		if(werte_array[j] == 1);
    		{
    			PORTB |= (1<<MOSI);
    		}
    		if(werte_array[j] == 0);
    		{
    			PORTB &= ~(1<<MOSI);
    		}
    		PORTB |= (1<<SCK);
    		_delay_ms(1);
    		PORTB &= ~(1<<SCK);
    	}
    }
    
    void register_setzen_an_rfm12(int wert)
    {
    	PORTB |= (1<<SS);
    	senden_mit_rfm12(wert);
    	PORTB &= ~(1<<SS);
    }
    
    void init_rfm12(void)
    {
    	
    
    	DDRB |= (1<<SCK)|(1<<MOSI)|(1<<SS);
    	PORTB = 0;
    	
    	register_setzen_an_rfm12(0x80D7);		//433Mhz
    	register_setzen_an_rfm12(0x82B9);		//enable transmitter enable synthesizer enable crystal oszilator disable CLK-PIN
    	register_setzen_an_rfm12(0xA4B0);		//433Mhz
    	register_setzen_an_rfm12(0xC6BD);		//9600Baud
    
    }

    und hier der interrupt in meiner main.c

    Code:
    #define SPI PINB
    #define MISO PINB6
    
    int abfangarray[16];
    int empf_wert;
    int x = 0;
    
    
    ISR(INT0_vect)
    {
    	abfangarray[x] = (SPI & (1<<MISO));
    	if(x<15)
    		x=x+1;
    	else
    	{
    		x=0;
    		int y;
    		empf_wert=0;
    		for(y=0;y<=15;y=y+1)
    		{
    			if(abfangarray[y]==1)
    			{
    				empf_wert = empf_wert + pow(2,y);
    			}		
    		}
    	}
    }
    ich denke mal der Haken liegt an der art und weise wie ich die daten an den RFM12 übergeben nur hab ich verstanden das es so sein soll

    da ich kein assembler beherrsche bzw benutze hab ich die genannte sbi und cbi methode durch einfache ausgangsbeschaltung ersetzt
    das dürfte aber doch auch funktionieren oder?


    bei meinem interrupt bin ich mir gerad garnich sicher wie das signal vom MISO ausgelesen wird
    sprich woher weiß der controller (außer er zählt wie in meinem fall mit) das wenn ein bit kommt das es das erste ist und nicht irgendeins mitten drin
    und kommt beim empfangen auch das 2byte große signal an oder nur ein byte im ASCII-format?

    bedanke mich schonmal für jede antwort oder verbesserung meines codes

    grüße

  7. #27
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    @Grandalf

    Ich hab deinen Code nach Codevision umgestrickt und durch den Simulator von AVR Studio gejagt.

    Erstmal wurden da eine ganze Menge Compilerfehler gemeldet.

    Zum Beispiel der Ausdruck
    pruefung=pruefung - pow(2,i);

    Kann der stimmen oder gehören da nicht eckige Klammern hin ?
    also
    pruefung=pruefung - pow[2,i];

    Zum zweiten wurde nach dem rausmachen dieser Fehler nur der Port B.0 aktiv. Alle Aktionen gingen nur auf diesen Port.

    Über diesen Ausdruck:

    Code:
    while(!(PIND & (1<<nIRQ)))
       {
    
       }
    lief der Simulator auch nach änderung des DDR und des Pind nicht drüber.

    Teste doch mal dein Programm mit AVR - Studio 4 aus, dann wird es auch in der realen Welt wahrscheinlicher das es funktionieren wird.

  8. #28
    Benutzer Stammmitglied
    Registriert seit
    29.04.2008
    Beiträge
    49
    hi wkrug

    ich benutze AVR-Studio 4 und ich habe insgesamt nur ein warning und das bezieht sich auf eine funktion in der delay.h (die warnung erscheint aber bei all meinen programmen und ist zu vernachlässigen)

    bei pow gehören laut c-buch normale klammern hin pow()

    der PIND2 ist gleichzeitig der pin für den externen interrupt (von dem ich 2 stück habe PinD 2 und PinD3 und beide sind belegt einmal mit NIRQ und einmal mit DCLK)

    ich habe in meinem gesamtprogramm auch noch andere funktionen drin (LCDansteuerung und RS232 übertragung) und ohne das neue rfm12.c funktionieren die auch ich kann ja mal alles hier reinstellen. im grunde will ich am ende per hyperterminal einen buchstaben eingeben und den dann von einem evalutations board zu anderen schicken und auf dem 2ten board in der lcd anzeige ausgeben.

    also

    die main.c
    Code:
    #ifndef F_CPU 
    #define F_CPU 4000000L
    #endif
    #define SPI PINB
    #define MISO PINB6
    
    #include <avr/io.h>
    #include <avr/iom16.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include <inttypes.h>
    #include <math.h>
    #include "LCD-8bit.h"
    #include "RS232.h"
    #include "RFM12.h"
    //Eigenschaften festelgen;
    volatile char rs232_empf_zeichen;
    volatile int rs232_empf_gesetzt = 0;
    volatile char rs232_send_zeichen;
    volatile int rs232_send_gesetzt = 0;
    volatile char rfm12_empf_zeichen;
    volatile int rfm12_empf_gesetzt = 0;
    volatile char rfm12_send_zeichen;
    volatile int rfm12_send_gesetzt = 0;
    volatile char lcd8bit_zeichen;
    volatile int abfangarray[16];
    volatile int x = 0;
    
    
    ISR(INT0_vect)
    {
    	PORTC |= (1<<PC1);
    	abfangarray[x] = (SPI & (1<<MISO));
    	if(x<15)
    		x=x+1;
    	else
    	{
    		x=0;
    		int y;
    		rfm12_empf_zeichen=0;
    		for(y=0;y<=15;y=y+1)
    		{
    			if(abfangarray[y]==1)
    			{
    				rfm12_empf_zeichen = rfm12_empf_zeichen + pow(2,y);
    			}		
    		}
    		rfm12_empf_gesetzt = 1;
    	}
    }
    
    
    ISR(USART_RXC_vect)
    {
    	while(!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar
    	{
    
    	}
    	PORTC |= (1<<PC0);
    	rs232_empf_zeichen = UDR; // Zeichen aus UDR lesen
    	rs232_empf_gesetzt = 1;
    }
    
    int main(void) 
    {
    	DDRC |= (1<<PC0)|(1<<PC1);
    	sei();
    	init_8bitlcd();
    	init_uart();
    	init_rfm12();
    	while(1)
    	{
    		if(rs232_empf_gesetzt == 1)
    		{
    			
    			daten_schreiben(rs232_empf_zeichen);
    			rs232_empf_gesetzt = 0;
    			rfm12_send_gesetzt = 1;
    		}
    		else
    		{
    			PORTC &= ~(1<<PC0);
    		}	
    		if(rfm12_empf_gesetzt == 1)
    		{
    			daten_schreiben(rfm12_empf_zeichen);
    			rfm12_empf_gesetzt = 0;
    			rs232_send_gesetzt = 1;	
    		}
    		else
    		{
    			PORTC &= ~(1<<PC1);
    		}
    		if(rs232_send_gesetzt == 1)
    		{
    			rs232_send_zeichen = rfm12_empf_zeichen;
    			senden_mit_rs232(rs232_send_zeichen);
    			senden_mit_rs232('5'-40);
    			senden_mit_rs232(rs232_send_zeichen);
    			rs232_send_gesetzt = 0;
    		}
    		if(rfm12_send_gesetzt == 1)
    		{
    			PORTC |= (1<<PC2);
    			rfm12_send_zeichen = rs232_empf_zeichen;
    			senden_mit_rfm12(rfm12_send_zeichen);
    			senden_mit_rfm12('5'-40);
    			senden_mit_rfm12(rfm12_send_zeichen+40);
    			rfm12_send_gesetzt = 0;
    			PORTC &= ~(1<<PC2);
    		}		
    	}
    	return 0;
    }
    dann die rfm12.c
    Code:
    #ifndef F_CPU 
    #define F_CPU 4000000L	//Controllerfrequenz für die util/delay.h
    #endif
    #include <avr/io.h>
    #include <avr/iom16.h>
    #include <util/delay.h>
    #include <inttypes.h>
    #include <math.h>
    #include "RFM12.h"
    
    
    #define SCK PB7
    #define MOSI PB5
    #define SS PB4
    #ifndef SPI
    #define SPI PINB
    #endif
    #ifndef MISO
    #define MISO PINB6
    #endif
    #define DCLK PIND3
    #define nIRQ PIND2
    
    void senden_mit_rfm12(int wert)
    {
    	int werte_array[16];
    	int pruefung = wert;
    	int i = 0;
    	for(i = 0; i<=15; i=i+1)
    	{
    		pruefung=pruefung - pow(2,i);
    		if (pruefung >=0)
    		{
    			werte_array[i]=1;
    		}
    		else
    		{
    			pruefung=pruefung + pow(2,i);
    			werte_array[i]=0;
    		}
    	}
    
    	while(!(PIND & (1<<nIRQ)))
    	{
    
    	}	
    
    	int j = 0;
    	for(j = 0; j<=15; j=j+1)
    	{
    		if(werte_array[j] == 1);
    		{
    			PORTB |= (1<<MOSI);
    		}
    		if(werte_array[j] == 0);
    		{
    			PORTB &= ~(1<<MOSI);
    		}
    		PORTB |= (1<<SCK);
    		_delay_ms(1);
    		PORTB &= ~(1<<SCK);
    	}
    }
    
    void register_setzen_an_rfm12(int wert)
    {
    	PORTB |= (1<<SS);
    	senden_mit_rfm12(wert);
    	PORTB &= ~(1<<SS);
    }
    
    void init_rfm12(void)
    {
    	
    
    	DDRB |= (1<<SCK)|(1<<MOSI)|(1<<SS);
    	PORTB = 0;
    	
    	register_setzen_an_rfm12(0x80D7);		//433Mhz
    	register_setzen_an_rfm12(0x82B9);		//enable transmitter enable synthesizer enable crystal oszilator disable CLK-PIN
    	register_setzen_an_rfm12(0xA4B0);		//433Mhz
    	register_setzen_an_rfm12(0xC6BD);		//9600Baud
    
    }
    nun die lcd-8bit.c
    Code:
    #ifndef F_CPU 
    #define F_CPU 4000000L	//Controllerfrequenz für die util/delay.h
    #endif
    //------------------------------------//------------------------------------
    //Ausgänge festlegen:
    #define datenposition DDRA
    #define datenwerte PORTA
    #define D0 PA0
    #define D1 PA1
    #define D2 PA2
    #define D3 PA3
    #define D4 PA4
    #define D5 PA5
    #define D6 PA6
    #define D7 PA7
    #define steuerungsposition DDRB
    #define steuerwerte PORTB
    #define E PB0
    #define R_W PB1
    #define RS PB2
    //------------------------------------
    #include <avr/io.h>
    #include <avr/iom16.h>
    #include <util/delay.h>
    #include <inttypes.h>
    #include "LCD-8bit.h"
    volatile int zaehler = 0;
    //------------------------------------
    int _D = 1;				//Display an(1)/aus(0)
    int _C = 0;				//Cursor an(1)/aus(0)
    int _B = 0;				//Cursor blinken an(1)/aus(0)
    int _N = 1; 			//zweizeiliges(1)/einzeiliges(0) Display 
    int _F = 0;				//5x10-Font(1)/5x7-Font(0)
    int _BF = 0;			//ist beschäftigt(1)/Kann Kommandos annehmen(0)
    int LCD_stellen = 16;	//anzahl der möglichen Zeichen pro zeile
    //------------------------------------
    
    void enable(void)
    {
    	steuerwerte |= (1<<E);
    	_delay_ms(1);// kurze pause
    	steuerwerte &= ~(1<<E);
    	_delay_ms(1);// kurze pause
    }
    
    void init_8bitlcd(void)
    {
    	datenposition = 0xFF;
    	datenwerte = 0x00;
    	steuerungsposition = (1<<E)|(1<<R_W)|(1<<RS);
    	steuerwerte = 0x00;
    	_delay_ms(16);
    	funktionen(1,0,0);
    	_delay_ms(5);
    	funktionen(1,0,0);
    	_delay_ms(1);
    	funktionen(1,0,0); 
    	modus(1,0);
    	display_und_cursor_optionen(1,0,0);
    	bild_loeschen();
    	cursor_auf_startpos();
    }
    
    void bild_loeschen(void)
    {
    	steuerwerte &= ~((1<<RS)|(1<<R_W));
    	datenwerte = 0;
    	datenwerte |= (1<<D0);
    	enable();
    }
    
    void cursor_auf_startpos(void)
    {
    	steuerwerte &= ~((1<<RS)|(1<<R_W));
    	datenwerte = 0x00;
    	datenwerte |= (1<<D1);
    	enable();
    	zaehler = 0;
    }
    
    
    // I_D => Curserposition Inkrement(1)/dekrement(0) (schreibrichtung festlegen)
    // S => Displayinhalt fest(1)/weiterschieben(0)
    void modus(int I_D, int S)
    {
    	steuerwerte &= ~((1<<RS)|(1<<R_W));
    	datenwerte = 0x00;
    	datenwerte |= (1<<D2);
    	if(I_D==1)
    		datenwerte |= (1<<D1);
    	if(S==1)
    		datenwerte |= (1<<D0);
    	enable();
    }
    
    
    // D => Display an(1)/aus(0)
    // C => Cursor an(1)/aus(0)
    // B => Cursor blinken an(1)/aus(0)
    void display_und_cursor_optionen(int D, int C, int B)
    {
    	steuerwerte &= ~((1<<RS)|(1<<R_W));
    	datenwerte = 0x00;
    	datenwerte |= (1<<D3);
    	if(D==1)
    		datenwerte |= (1<<D2);
    	if(C==1)
    		datenwerte |= (1<<D1);
    	if(B==1)
    		datenwerte |= (1<<D0);
    	enable();
    }
    
    
    // S_C => Displayinhalt schieben(1)/Cursor bewegen(0)
    // R_L => S_C nach rechts(1)/nach links(0) schieben
    void cursor_oder_display_schieben(int S_C, int R_L)
    {
    	steuerwerte &= ~((1<<RS)|(1<<R_W));
    	datenwerte = 0x00;
    	datenwerte |= (1<<D4);
    	if(S_C==1)
    		datenwerte |= (1<<D3);
    	if(R_L==1)
    		datenwerte |= (1<<D2);
    	enable();
    }
    
    
    // DL => 8bit-Interface(1)/4bit-Interface(0)
    // N => zweizeilig(1)/einzeilig(0)
    // F => 5x10-Font(1)/5x7-Font(0)
    void funktionen(int DL, int N, int F)
    {
    	steuerwerte &= ~((1<<RS)|(1<<R_W));
    	datenwerte = 0x00;
    	datenwerte |= (1<<D5);
    	if(DL==1)
    		datenwerte |= (1<<D4);
    	if(N==1)
    		datenwerte |= (1<<D3);
    	if(F==1)
    		datenwerte |= (1<<D2);
    	enable();
    }
    
    
    //adresse => CGRAM-Adresse (6stellig)
    void CGRAM(int adresse)
    {
    	steuerwerte &= ~((1<<RS)|(1<<R_W));
    	datenwerte = 0x00;
    	datenwerte |= (1<<D6);
    	enable();
    }
    
    
    //adresse => DDRAM-Adresse  (7stellig)
    void DDRAM(int adresse)
    {
    	steuerwerte &= ~((1<<RS)|(1<<R_W));
    	datenwerte = 0x00;
    	datenwerte |= (1<<D7);
    	enable();
    }
    
    
    //adresse => CG-/DDRAM-Adresse (7stellig)
    //BF => ist beschäftigt(1)/Kann Kommandos annehmen(0)
    void adresse_oder_status_lesen(int adresse, int BF)
    {
    	steuerwerte |= (1<<R_W);
    	steuerwerte &= ~(1<<RS);
    	datenwerte = 0x00;
    	datenwerte = adresse;
    	if(BF==1)
    		datenwerte |= (1<<D7);
    	enable();
    
    }
    
    //zeichen => Dezimalzahl des zu schreibenden Zeichens nach ASCII-Tabelle
    void  daten_schreiben(int zeichen)
    {
    	if(zaehler<=(LCD_stellen - 1))
    		zaehler = zaehler + 1;
    	if(zaehler==LCD_stellen)
    		cursor_oder_display_schieben(1,0);
    	steuerwerte |= (1<<RS);
    	steuerwerte &= ~(1<<R_W);
    	datenwerte = 0x00;
    	datenwerte = zeichen; 
    	enable();
    }
    
    
    // *text => Zeiger auf ein char array mit den anzugeigenden Zeichen (länge egal)
    // LCD_stellen => hier angeben wie viele Zweichen pro zeile auf dem Display angezeigt werden können
    void text_schreiben(char *text)
    {
    	while(*text)
    	{
    		daten_schreiben(*text);
    		text++;
    	}
    }
    und als letztes die rs232.c
    Code:
    #ifndef F_CPU 
    #define F_CPU 4000000L	//Controllerfrequenz für die util/delay.h
    #endif
    #ifndef Baudrate 
    #define Baudrate 9600L
    #endif
    
    #include <avr/io.h>
    #include <avr/iom16.h>
    #include <util/delay.h>
    #include <inttypes.h>
    #include "RS232.h"
    
    void senden_mit_rs232(char x)
    {
    	while (!(UCSRA & (1<<UDRE))) // warten bis Senden moeglich 
    	{
    
    	}
    	UDR = x; // schreibt das Zeichen x auf die Schnittstelle 
    }
    
    
    void init_uart(void)
    {
    	UCSRB =0;
    	// Definition zum senden + Interupt wenn gesendet wurde + interupt wenn sendeplatz wieder frei
    	UCSRB |= (1<<TXEN);
    	UCSRC |= (1<<URSEL)|(3<<UCSZ0); //Asynchron 8N1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
    
    
    	// Definition zum empfangen + Interupt wenn signal empfangen wird
    	UCSRB |= (1<<RXEN)|(1<<RXCIE);
    	
    	//Definition für 9bit übertragung mit paritätsbit (optional)
    	//UCSRB |= (1<<CHR9)   
    		//UCSRB|=(1<<RXB8) stellt das 9. empfangsbit dar
    		//UCSRB|=(1<<TXB8) stellt das 9. sendebit dar
    	
    	//Definierung der Übertragungsgeschwindigkeit
    	int UBRR_VAL = (F_CPU/(Baudrate*16))-1; 
    	UBRRH = UBRR_VAL >> 8;
    	UBRRL = UBRR_VAL & 0xFF;
    }
    die dazugehörigen .h dateien müssten noch ebend nacherzeugt werden
    da ich ja leider von einem interrupt schlecht ein return zurück bekommen kann stehen diese in der main statt ihrer passenden unterdatei und beziehen sich auf globale variablen.

    der fehler liegt sicherlich bei meiner rfm12.c nur weiß ich nicht wo.
    wenn ich den code auf meinen controller überspiele und teste kann ich beim hyperterminal eingeben was ich will es passier NIX außer das die RS232 übertragungs LED leuchtet.

  9. #29
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Gut, wenns bei Dir so funktioniert solls mir recht sein.

    pow(2,i) ist demnach ein Funktionsaufruf und keine indizierte Variable.

    Ich hab bei meinem Programm auch immer nur 8 Bit an das RFM02 übertragen, weil mir das einfacher erschien.
    Die Steuerung des CS ( SS? ) hab ich vor dem Aufruf der Software SPI gemacht.

    Wenn Du schon mit Studio arbeitest, was macht dein Programm wenn Du im Einzelschritt modus die RFM Routinen durchlaufen lässt.

    Werden tatsächlich alle Steuerleitungen so wie im Datenblatt des RFM12 beschrieben angesteuert? Dann müsste es auch gehen.

    Ich denk mal, das Du AVR-GCC benutz und den Code kann ich hier nicht austesten.

  10. #30
    Benutzer Stammmitglied
    Registriert seit
    29.04.2008
    Beiträge
    49
    ja als compiler benutze ich den AVR-GCC

    und pow() ist die potenzierungsfunktion aus der math.h

    was ich nur wissen wollte, ist denn die art und weise wie ich die daten in den RFM12 einspeise richtig? und wie sieht das beim auslesen aus?

    Debugging kann ich leider nicht machen (die standart AVR-Studio compiler funktionieren nicht, auch ein grund warum ich den GCC benutze)

    zum testesn meines codes spiele ich ihn immer auf den controller und schaue mir sein verhalten an

    naja und es leuchtet dauerhaft die LED für den RFM12 (PORTC PC2)
    und ansonsten nichts (keine lcd anzeige oder ander LED die leuchtet)

Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress