Hi, bin noch recht neu in der µC Welt. Hab nen ATTiny24 und habe ihn glaube ich dazu gebracht mir AA über SPI auszugeben. Jedoch schaffe ich es nicht am Rechner das AA zu sehen. Hab in C++ ein Programm geschrieben welches mir den COM-Port ausliest, an welchem der µC über ein STK500-Board (USB-Stick) angeschlossen ist. Allerdings muss ich da sowas wie die Baudrate, Paritybit und Stopbits angeben. Doch weiß ich jetzt nicht wirklich wo ich dem µC diese Daten gegeben habe, bzw. ob diese für den µC fest vorgegeben sind. Kann mir da jemand sagen wie ich das raus finde oder ob ich das irgendwie anders machen muss? Im folgenden das Programm welches ich auf den µC gespielt habe. ------------------------------------------------------------------------ - #include <avr/io.h> #include <stdlib.h> #include <util/delay.h> void SPI_init(void) { DDRA |= (1<<PA4)|(1<<PA5); //Output: PA4=USCK, PA5=DO DDRA &= ~(1<<PA6); //Input: PA6=DI PORTA |= (1<<PA6); //int. Pull-up an PA6 aktivieren DDRA |= (1<<PA7); //LED auf Ausgang USICR = (1<<USIWM0) | (1<<USICLK)|(1<<USITC)| (1<<USICS1); // USIWM0 = 1: SPI-Betrieb mit DO, DI und USCK // USICLK = 1, USITC = 1, USICS1 = 1: generiert den Taktimpuls für das Schieberegister und // den 4bit Timer. Der Takt wird am USCK-Pin (PA4) ausgegeben. } void SPI_transfer(int data) { USIDR = data; //Daten in Data Register laden USISR |= (1<<USIOIF); //Überlaufflag löschen while (!(USISR & (1<<USIOIF))) //solange kein Timerüberlauf... { USICR |= (1<<USITC); //Toggle clk (2x) USICR |= (1<<USITC); } } int main (void) { SPI_init(); while(1) { SPI_transfer(0xAA); // Daten (AA) senden PORTA |= (1<<PA7); // Led on _delay_ms(1000); PORTA &= !(1<<PA7); // Led off _delay_ms(1000); } } ------------------------------------------------------------------------ - Desweiteren konnte ich keinen kostenlosen Serial Port Monitor, RS232 Sniffer oder ähnliches finden welches auf Win7 64 bit läuft. Wüsste dort vieleicht jemand was womit ich sehen kann was durch meinen COM-Port geht?
Ich habe einen USB-Stick mitdem ich meinen µC programmiere, welchen ich in AVR-Studio als STK500-Board verwende. dieser USB-Stick schickt die SPI daten vom µC durch den USB-Stick über einen COM-Port und umgekehrt
Anthony Swofford schrieb: > ch habe einen USB-Stick mitdem ich meinen µC programmiere, welchen ich > in AVR-Studio als STK500-Board verwende. Wie heißt das Teil?
Du wirst einen USB-Programmer haben den das AVR-Studio als STK500 erkennt und deinen µC über ISP programmiert. Die ISP-Schnittstelle verwendet die SPI-Pin, hat aber nichts damit zu tun.
OK, dann weiß ich jetzt wieso ich ISP und SPI immer verwechselt habe. Aber ich müsste den USB-Programmer doch auch nutzen können um die vom µC ausgehenden Daten am Rechner anzeigen zu lassen. Kann mir da vieleicht jemand sagen wie ich das genau mache?
Nein, das geht meiner Ansicht nach nicht. Dazu wirst du am Besten Rx und Tx des µC verwenden mit Pegelwandler (MAX232) dazwischen.
Anthony Swofford schrieb: > Aber ich müsste den USB-Programmer doch auch nutzen können um die vom µC > ausgehenden Daten am Rechner anzeigen zu lassen. Was verleitet dich zu dieser Annahme? Hast du einen passenden Betriebssystem-Treiber für das Interface? Wie empängst du üblicherweise SPI-Daten an deinem PC?
Anthony Swofford schrieb: > Aber ich müsste den USB-Programmer doch auch nutzen können um die vom µC > ausgehenden Daten am Rechner anzeigen zu lassen. Mit der passenden Firmware sicher. Die wirst du aber selber schreiben müssen. Wenn du am Rechner Daten via SPI empfangen willst, könnte ein Buspirat die Lösung sein. Man könnte dann das Bus Pirate SPI sniffer helper utility v0.3[1] nehmen. [1] http://code.google.com/p/the-bus-pirate/downloads/detail?name=BusPirate.SPIsniffer.v0.3.zip&can=2&q= Gruß Oliver
Hubert G. schrieb: > Dazu wirst du am Besten Rx und Tx des µC verwenden mit Pegelwandler > (MAX232) dazwischen. Seit wann hat ein ATtiny25 denn einen UART? Der hat maximal ein USI, mit dem man einen Mix aus Hardware- und Software-UART machen kann[1]. [1] AVR307
Ich sehe den USB-Programmer ja als Com-port im Gerätemenager. Und über C++ kann ich daten vom COM-Port einlesen und ausgeben. Allerdings brauche ich dafür solche Daten wie die Baudrate. Wenn ich die Daten hätte, müsste ich meiner Meinung nach in lage sein die Daten des µC auszulesen. Im Folgenden wie ich die Daten des µC's über C++ einlesen möchte. Wie ihr dort sehen könnt muss ich sowas wie die Baudrate Parity etc. angeben ------------------------------------------------------------------------ -- //Connect to COM Port + Settings AnsiString ASComPort = CB_ComPort->Text; std::string csComIntro = ASComPort.c_str(); std::string csComPort = "\\\\.\\" + csComIntro; hSerial=CreateFileA(csComPort.c_str(),GENERIC_READ|GENERIC_WRITE,0,0,OPE N_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if(hSerial==INVALID_HANDLE_VALUE) {B_Connect->Caption = "ERROR_1";} memset(&Device,0,sizeof(Device)); Device.DCBlength = sizeof(Device); Device.BaudRate = iBaudrate; // Baudrate Device.fParity = FALSE; Device.fBinary = TRUE; Device.Parity = NOPARITY;// Kein Paritybit Device.StopBits = ONESTOPBIT; Device.fOutxCtsFlow = FALSE; Device.fOutxDsrFlow = FALSE; Device.fDtrControl = DTR_CONTROL_ENABLE; Device.fRtsControl = RTS_CONTROL_ENABLE; Device.fDsrSensitivity = FALSE; Device.fAbortOnError = FALSE; Device.ByteSize = 8; // 8 Datenbits if(!SetCommState(hSerial,&Device)) { CloseHandle(hSerial); B_Connect->Caption = "ERROR_2"; }else B_Connect->Caption = "Disconnect"; sTo.ReadIntervalTimeout = MAXDWORD; // 0 ms Read-Tomeout sTo.ReadTotalTimeoutMultiplier = 0; sTo.ReadTotalTimeoutConstant = 0; sTo.WriteTotalTimeoutMultiplier= 1; // 1*2 ms Write Timeout sTo.WriteTotalTimeoutConstant = 2; if(!SetCommTimeouts((HANDLE)hSerial,&sTo)) { CloseHandle(hSerial); B_Connect->Caption = "ERROR_3"; } AS_Send = "AA"; WriteFile(hSerial, AS_Send.c_str(), AS_Send.Length(), &dwBytesWritten, NULL); ReadFile(hSerial, AS_Revieve.c_str(), 256, &dwBytesRead, NULL); if(1) { I_Status->Picture = I_Open->Picture; } ------------------------------------------------------------------------ --
Was für einen Programmer/Stick hast du denn? Wie heißt der? Das wäre wichtig zu wissen, um sagen zu können, ob es eventuell doch möglich ist, damit Rohdaten über SPI empfangen. Ich denke aber, es ist nicht möglich. Gruß Oliver
Ich habe einen: DIAMEX USB ISP-Programmer für ATMEL AVR, STK500, ATmega http://www.ebay.de/itm/DIAMEX-USB-ISP-Programmer-ATMEL-AVR-STK500-ATmega-/320807196725?pt=DE_Technik_Computerzubeh%C3%B6r_Kabel_Adapter&hash=item4ab1995835
Ich habe alternativ auch noch ein TTL-232R-3V3 http://de.farnell.com/jsp/displayProduct.jsp?sku=1329311&CMP=e-2072-00001000&gross_price=true und ein XBEE USB Donlge https://www.loveelectronics.co.uk/products/182/XBee-USB-Dongle-%28Explorer%29?Currency=3
Anthony Swofford schrieb: > Ich habe einen: DIAMEX USB ISP-Programmer für ATMEL AVR, STK500, ATmega > > http://www.ebay.de/itm/DIAMEX-USB-ISP-Programmer-ATMEL-AVR-STK500-ATmega-/320807196725?pt=DE_Technik_Computerzubeh%C3%B6r_Kabel_Adapter&hash=item4ab1995835 der kann genau das: - FLASH, EEPROM, Fusebits, Lockbits schreiben, lesen, Chip erase, OSCCAL-Register lesen Auf der seriellen Schnittstelle spricht der ein spezielles STK500-Protokoll (kann man sich auch bei Atmel anschauen) und das unterstützt keine "SPI-to-COM-Bridge" - wozu auch bei einem Programmer. Sascha
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.