- LiFePO4 Speicher Test         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 38

Thema: Gameboy Kamera an rs232

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    38
    Beiträge
    674
    Anzeige

    Powerstation Test
    ...zur zeit keine lösung gefunden, die zur hinderniserkennung funktioniert.
    da schließ ich mich Z80 an, aber eine Hinderniserkennung für einen mobilen Roboter ist das Ziel von mir und eines Bekannten, wobei ich eher für die Hardware zuständig bin und er für die Bildverarbeitung

    das Ganze ist, wie gesagt, momentan noch ziemlich experimentell, daher ist es auf einer Streifenrasterplatine hauptsächlich mit Litzenverbindungen aufgebaut, als µC kommt ein ATMega16-16 zum Einsatz, der momentan noch intern mit 1MHz getaktet ist
    das ist natürlich erstens viel zu langsam und auch nicht genau genug für die usart, weshalb ich demnächst einen externen Quarz verwenden werde
    der ADC ist der PCF8591(angeblich tuts auch der im AVR eingebaute ADC, was aber sicherlich die schnellste der drei Methoden ist, ist ein externer ADC mit parallelem Interface)
    @ pebisoft: was meinst du mit Funktion? meinst du, wofür ich die cam im Moment verwende? wenn ja, zum Bildermachen (das ganze ist schließlich noch in der Test- und Aufbauphase)

    die Daten kann man vie RS232 auf den PC laden und als Bild betrachten, im Moment, wegen der schlechten Taktung, aber nur mit 2400 Baud(ich weiß, das ist verdammt wenig), wenn ich aber eine höhere Geschwindigkeit verwende, gibts Probleme(ich hoffe aber, dass die sich mit einem neuen(genauen) Quarz verringern lassen)

    Schaltungsbeschreibung habe ich nicht, da ich dafür keinen Schaltplan gezeichnet habe, sondern mit die Datenblätter angeschaut und danach gelötet habe

    die µC-Software ist komplett selbst geschrieben und funktioniert auch, nur wird die niemand nachvollziehen können, da ich nicht sehr ausführlich kommentiere
    ich kann das in den kommenden Tagen mal nachholen(geht aber nicht so schnell)

    bei Unklarheiten bitte weiterfragen...

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hast du in c oder asm geproggt.
    wenn du intern auf 8mhz gehst (geht beim AVR16-16), kannst du 19200baud übertragen.
    mfg pebisoft

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    38
    Beiträge
    674
    ich hab in C programmiert

    wenn du intern auf 8mhz gehst (geht beim AVR16-16), kannst du 19200baud übertragen.
    danke für den Tip, ich dachte, der interne Takt sei bei 8MHz nicht mehr exakt genug für usart-Übertragungen

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    kannst du dein c mal hier reinstellen, spielt keine rolle wie es aussieht.
    ich habe zur zeit das winavr-c von "uli" wo er seine grafikkarte mit ansteuert und ein bild von der gameboy-com abbildet, das teilprogramm habe ich dann rausgezogen und mit den register-einstelldaten aus dem forum versehen.
    mfg pebisoft

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    das der UART nicht immer genau funktioniert liegt an den condensatoren am max, die teilweise zu grosse abweichung in der vorgeschriebenen toleranz haben.
    mfg pebisoft

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    38
    Beiträge
    674
    das der UART nicht immer genau funktioniert liegt an den condensatoren am max, die teilweise zu grosse abweichung in der vorgeschriebenen toleranz haben.
    welche Kondensatoren sollte man dann verwenden?

    hier mein Code:
    die Headerdatei:
    Code:
    #include <avr/io.h>
    #include <avr/signal.h>
    #include <avr/twi.h>
    #include <stdlib.h>
    #include "TWI.h"
    #include "uart.h"
    #include "sram.h"
    
    #define START_PORT	PORTB
    #define START_PIN	1
    
    #define SIN_PORT	PORTD
    #define SIN_PIN		7
    
    #define LOAD_PORT	PORTD
    #define LOAD_PIN	6
    
    #define RESET_PORT	PORTB
    #define RESET_PIN	4
    
    #define XCK_PORT	PORTD
    #define XCK_PIN		2
    
    #define READ_PORT	PIND
    #define READ_PIN	3
    
    
    void sei(void);
    uint8_t ADC_read(uint8_t, uint8_t);
    void ADC_print(uint8_t);
    void gbcam_write(uint8_t, uint8_t);
    void pos_imp(void);
    void delay(uint8_t);
    die Codedatei:
    Code:
    #include "gbcam.h"
    
    uint8_t temp=0, counter;
    
    int main(void)
    {
    /*  Deaktivieren des JTAG-Interfaces  */
    	MCUCSR = (1<<JTD);
    	MCUCSR = (1<<JTD);
    
    /*  Initialisieren des UART  */
    	uart_init(UART_BAUD_SELECT(2400, 1000000));
    
    /*  Initialisieren des TWI  */
    	TWI_init(0xFD);
    
    /*  Initialisieren von PortA  */
    	DDRA = 0xFF;
    	PORTA = 0x0;
    
    /*  Initialisieren von PortB  */
    	DDRB = 0xF;
    	DDRB |= 0x12;
    
    /*  Initialisieren von PortD  */
    	DDRD |= 0xC4;
    	DDRD &= ~0x8;
    
    	PORTB |=  (1<<WE);
    
    /*  Interrupts global aktivieren  */
    	SREG |= 1<<7;		//sei(); 
    
    /*  gbcam resetten  */
    	RESET_PORT &= ~(1<<RESET_PIN);	
    	XCK_PORT |= (1<<XCK_PIN);
    	RESET_PORT |= (1<<RESET_PIN);
    	XCK_PORT &= ~(1<<XCK_PIN);	
    
    /*  gbcam-Register beschreiben  */
    	gbcam_write(0x0, 0x80);		 
    	gbcam_write(0x1, 0x04);		
    	gbcam_write(0x2, 0x00);		
    	gbcam_write(0x3, 0x15);		
    	gbcam_write(0x4, 0x01);		
    	gbcam_write(0x5, 0x00);
    	gbcam_write(0x6, 0x01);		
    	gbcam_write(0x7, 0x04);		
    
    /*  Bild machen...  */
    	START_PORT |= (1<<START_PIN);
    	pos_imp();
    	START_PORT &= ~(1<<START_PIN);
     
    /*  ...und warten, bis Bild fertig ist  */
    	while(!(READ_PORT & (1<<READ_PIN))) 
    		pos_imp();
    
    /*  ADC konfigurieren  */
    	uint8_t u;
    	u = ADC_read(0x48, 0x41);
    
    /*  Pixelwerte lesen und in SRAM speichern  */
    	uint16_t counter=0;
    
    	for(counter = 0; counter < 16384; counter++) {    
    		pos_imp();
    		sram_write_byte(counter, TWI_readbyte()); 
    	}
    
    
    /*  TWI_Verbindung beenden  */
    	TWI_stop();
    
    /*  Pixelwerte aus Speicher lesen und an PC senden  */
    	for(counter = 0; counter < (16384); counter++) {
    		u = sram_read_byte((counter)); 
    		uart_putc(u); 
    	}
    
    	while(1);
    }
    
    
    /*  Funktion zum Initialisieren und Lesen des ADCs  */
    
    uint8_t ADC_read(uint8_t addresse, uint8_t control)
    {
    	uint8_t temp; 
    	TWI_start((addresse << 1) | SEND); 
    	TWI_sendbyte(control);			
    	TWI_start((addresse << 1) | READ);
    	temp = TWI_readbyte();
    	temp = TWI_readbyte();
    	return temp;
    }
    
    
    /*  Funktion zum Beschreiben der Kameraregister  */
    void gbcam_write(uint8_t addr, uint8_t wert)
    {
    	uint8_t temp;
    	for(temp=3; temp > 0; temp--) {
    		if((addr & (1<<(temp-1))) == (1<<(temp-1))) SIN_PORT |= (1<<SIN_PIN);
    			else SIN_PORT &= ~(1<<SIN_PIN);
    		pos_imp(); 
    	}
    	
    	for(temp=8; temp > 1; temp--) {
    		if((wert & (1<<(temp-1))) == (1<<(temp-1))) SIN_PORT |= (1<<SIN_PIN);
    			else SIN_PORT &= ~(1<<SIN_PIN);
    		pos_imp();
    	}
    
    	if((wert & (1<<0)) == (1<<0)) SIN_PORT |= (1<<SIN_PIN);
    		else SIN_PORT &= ~(1<<SIN_PIN);
    
    	XCK_PORT |= (1<<XCK_PIN);
     	delay(3);	
    	LOAD_PORT |= (1<<LOAD_PIN);
    	delay(3);	
    	XCK_PORT &= ~(1<<XCK_PIN);	
    	LOAD_PORT &= ~(1<<LOAD_PIN); 
    }
    
    
    /*  Erzeugen eines positiven Impulses am Taktpin  */
    
    void pos_imp(void)	
    {
    	XCK_PORT |= (1<<XCK_PIN); 
    	delay(3);
    	XCK_PORT &= ~(1<<XCK_PIN);	
    }
    
    
    /*  Verzögerungsfunktion, Parameter bezieht sich nur auf Anzahl der auszuführenden nops  */
    
    void delay(uint8_t time)
    {
    	uint8_t temp;
    	for(temp = 0; temp < (time + 1); temp++)
    		asm("nop");
    }
    ich verwende ziemlich oft kurze Pausen(->delay() ), ob man die aber benötigt, weiß ich nicht

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    kondensatoren, die die vorgegebene toleranz , die der hersteller vorgibt auch einhalten. und das ist nicht immer der fall, condensatoren kann man nicht so einfach mit einem messgerät prüfen wie einen widerstand.
    mfg pebisoft

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    das programm hast du aber sauber geschrieben.
    vielen dank das du es reingestellt hast.
    wie funktioniert das eigentlich mit dem sram, welches hast du. packst du da alle 16kbyte rein. das mit dem sram ausserhalb des AVR habe ich noch nicht in den griff bekommen.
    mfg pebisoft

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    38
    Beiträge
    674
    das programm hast du aber sauber geschrieben.
    danke

    als sram verwende ich das 62256-80 von Reichelt, das hat eine Speicherkapazität von 32kByte
    da kommen alle 16kByte an Pixeldaten rein, ist vom programmieren her einfacher, außerdem hat der ATMega16 gerade mal 1kByte sram
    wie das mit dem sram funktioniert, steht ziemlich genau im Datenblatt, außerdem findet man dazu auch einiges im Internet, ich kann meine Routinen aber gerne mal aufbereiten und hier reinstellen

    du musst die Addresse(bei 32kByte 15 Bit)(da hier ziemlich viele Pins am µC benötigt werden, bietet sich die Verwendung von Latches an) an den Ram anlegen und dann, je nachdem, ob du schreiben oder lesen willst, die Steuerbits entsprechend setzen und beim schreiben vorher die Daten anlegen oder beim lesen die Daten in den µC einlesen
    den Code poste ich demnächst mal

  10. #20
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    danke , das du den code mal posten tust.
    da ist dies bestimmt auch drin: sram_write_byte(counter, TWI_readbyte());
    mfg pebisoft

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test