SPI communicatie tussen Attiny2313 en DAC debuggen

Goedendag,

Ik zou graag een bordje willen maken met daarop een Attiny2313 met een DAC (MPC4921) om zo wat voltages / laagfrequente golfjes te kunnen maken. Ik probeer dus nu een losse attiny2313 op een breadboard te programmeren (met USBasp) en dan te koppelen aan de MCP4921 via SPI, maar de communicatie werkt niet goed. Als ik het met een arduino Uno doe gaat het wel goed.

Mijn code (zie beneden) zou een trappetje moeten maken van 0 tot 5V. Omdat het een 12-bits DAC is, tellen we tot 4095. Dit werkt prima als ik het met een arduino doe maar met de losse Attiny krijg ik allemaal 5V blokjes en heel af en toe een ander voltage. Mijn vermoeden is dus dat er wel verbinding is maar dat de data corrupt raakt of dat er iets met de clock aan de hand is.

Ik gebruik een chinese 20 euro scope om te kijken wat er gebeurt en deze is te primitief om de SPI signalen goed te laten zien. Ik heb al even zitten frutsen maar het is me niet gelukt.

Ik heb deze instructies gebruikt voor het koppelen van de MCP4921 aan de arduino. http://www.bartvenneker.nl/Arduino/index.php?art=0015

Bij het aansluiten van de attiny zijn de SPI pins (MOSI/MISO/CLK) ook gekoppeld aan mijn USBasp programmer. Ik heb die ook ontkoppeld na het programmeren, maar geen resultaat.

Hier is de code die ik gebruik. Ik heb het eigenlijk gewoon gekopieerd van de link:

c code:


#include <SPI.h>
#define CS_DAC 9

void setup()
{   
  pinMode(CS_DAC,OUTPUT);
  digitalWrite(CS_DAC,HIGH);
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV2);
}

void loop()
{
  for (int i=0; i<=5; i++) {
    int c = (int)(4095 * (i/5.0));
    Write4921(c, CS_DAC);
    delay(1000);
  } 
}

void Write4921(int value, int CS) {
  byte data;
  digitalWrite(CS, LOW);
  data = highByte(value);
  data = B00001111 & data;
  data = B00110000 | data;
  SPI.transfer (data); 
  data = lowByte(value);
  SPI.transfer (data); 
  digitalWrite(CS, HIGH);
}

Heeft iemand een idee wat ik nog zou kunnen proberen om dit te debuggen?

hartelijk dank.

Arco

Special Member

SPI wel in goede mode? (er zijn er 4)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Die AtTiny2313 zit toch niet in de Arduino IDE?
Of heb je daar een set modules voor geinstalleerd?

Op 17 januari 2021 19:07:44 schreef deKees:
Die AtTiny2313 zit toch niet in de Arduino IDE?
Of heb je daar een set modules voor geinstalleerd?

Ja ik heb ATTinyCore geinstalleerd.

Op 17 januari 2021 18:10:07 schreef Arco:
SPI wel in goede mode? (er zijn er 4)

[bijlage]

Goeie! In mijn code geef ik die niet expliciet op. Dat zal betekenen dat de Arduino Uno om wat voor reden dan ook de juiste SPI mode pakt maar de attiny toevallig niet. Ga ze alle 4 even proberen.