Tjena!
Tänkte försöka mig på seriell kommunikation mellan atmega16 och datorn.
Har en bok "make avr programming" som jag utgår ifrån.
Kopierade kod från bokens hemsida för att enkelt testa att jag kopplat upp allt rätt på breadboarden.
När jag ska "builda" programmet i avr studio kommer det bara upp massa fel?
Skapade PinDefine.h och USART.h och kopierade även där in koden för dessa filer från hemsidan.
Någon som har en aning om vad problemet kan vara?
Någon dum miss eller 2års extra pluggande om seriell programmering som krävs?
Hagla gärna på med tips eller idiotförklaringar om ni är mer sugna på det
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Du kan inte bara markera den relevanta texten (speciellt felmeddelanden så klart)
och klippa in det mellan "code" markeringar? Det är t.ex helt omöjligt att klippa
något intressant från dina bilder för att förklara.
/*
A simple test of serial-port functionality.
Takes in a character at a time and sends it right back out,
displaying the ASCII value on the LEDs.
*/
// ------- Preamble -------- //
#include <avr/io.h>
#include <util/delay.h>
#include "pinDefines.h"
#include "USART.h"
int main(void) {
char serialCharacter;
// -------- Inits --------- //
LED_DDR = 0xff; /* set up LEDs for output */
initUSART();
printString("Hello World!\r\n"); /* to test */
// ------ Event loop ------ //
while (1) {
serialCharacter = receiveByte();
transmitByte(serialCharacter);
LED_PORT = serialCharacter;
/* display ascii/numeric value of character */
} /* End event loop */
return 0;
}
Senast redigerad av tokfan 24 april 2018, 22:40:40, redigerad totalt 1 gång.
/* Functions to initialize, send, receive over USART
initUSART requires BAUD to be defined in order to calculate
the bit-rate multiplier.
*/
#ifndef BAUD /* if not defined in Makefile... */
#define BAUD 9600 /* set a safe default baud rate */
#endif
/* These are defined for convenience */
#define USART_HAS_DATA bit_is_set(UCSR0A, RXC0)
#define USART_READY bit_is_set(UCSR0A, UDRE0)
/* Takes the defined BAUD and F_CPU,
calculates the bit-clock multiplier,
and configures the hardware USART */
void initUSART(void);
/* Blocking transmit and receive functions.
When you call receiveByte() your program will hang until
data comes through. We'll improve on this later. */
void transmitByte(uint8_t data);
uint8_t receiveByte(void);
void printString(const char myString[]);
/* Utility function to transmit an entire string from RAM */
void readString(char myString[], uint8_t maxLength);
/* Define a string variable, pass it to this function
The string will contain whatever you typed over serial */
void printByte(uint8_t byte);
/* Prints a byte out as its 3-digit ascii equivalent */
void printWord(uint16_t word);
/* Prints a word (16-bits) out as its 5-digit ascii equivalent */
void printBinaryByte(uint8_t byte);
/* Prints a byte out in 1s and 0s */
char nibbleToHex(uint8_t nibble);
char nibbleToHexCharacter(uint8_t nibble);
void printHexByte(uint8_t byte);
/* Prints a byte out in hexadecimal */
uint8_t getNumber(void);
/* takes in up to three ascii digits,
converts them to a byte when press enter */
Senast redigerad av tokfan 24 april 2018, 22:37:55, redigerad totalt 1 gång.
Notera de två code och /code taggarna i början och slutet nedan.
(Jag har använt dubbla så att de syns i exemplet också). Sen så
hade ju din kod tappat all indentering, så det blev inte snyggt ändå...
Det räcker med att du gör "edit" på dina inlägg ovan och lägger till
code taggarna så bör det bli bra...
[code]
/*
A simple test of serial-port functionality.
Takes in a character at a time and sends it right back out,
displaying the ASCII value on the LEDs.
*/
// ------- Preamble -------- //
#include <avr/io.h>
#include <util/delay.h>
#include "pinDefines.h"
#include "USART.h"
int main(void) {
char serialCharacter;
// -------- Inits --------- //
LED_DDR = 0xff; /* set up LEDs for output */
initUSART();
printString("Hello World!\r\n"); /* to test */
// ------ Event loop ------ //
while (1) {
serialCharacter = receiveByte();
transmitByte(serialCharacter);
LED_PORT = serialCharacter;
/* display ascii/numeric value of character */
} /* End event loop */
return 0;
}
Klas-Kenny skrev:När jag googlar "make avr programming" får jag en github som ett av de första resultaten, vilken verkar ha all kod från boken. Inklusive usart.c
Ett projekt består mycket ofta av fler .C-filer där en innehåller main() och resten kan vara "drivrutiner" för hårdvara (UART, I²C osv) medan andra kan vara uträkningar som kan behövas i andra projekt.
Mina projekt (INTE Arduino!) innehåller oftast runt 20 - 30 olika .C-filer.