Daten des ATTiny24 über SPI auslesen

OP #2453420
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?
OP
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?
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
OP
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;
  }
------------------------------------------------------------------------ 
--
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.