Giter VIP home page Giter VIP logo

arduinocore-megaavr's People

Contributors

aentinger avatar agdl avatar amcewen avatar championswimmer avatar chris--a avatar cmaglie avatar damellis avatar eighthave avatar espreng avatar facchinm avatar fede85 avatar ffissore avatar giulcioffi avatar imartyn avatar ivan-perez avatar johnholman avatar lauszus avatar matthijskooijman avatar mcudude avatar mlafauci avatar mlxxxp avatar nicohood avatar pbrook avatar per1234 avatar projectgus avatar ricklon avatar sandeepmistry avatar tigoe avatar westfw avatar zeveland avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

arduinocore-megaavr's Issues

Serial interface locks up on Nano Every

On a Nano Every, if you try and transfer more than about 128 characters from the Serial Monitor to the board via the serial interface it locks up, and the only solution is to unplug the USB cable.

The following program demonstrates the problem:

void setup() {
  Serial.begin(9600);
  while (!Serial);
  Serial.println("Ready");
}

int count = 0;

void loop() {
  if (count % 64 == 0) {
    Serial.println();
    Serial.print(count);
    Serial.write(' ');
  }
  while (!Serial.available());
  Serial.write((int)Serial.read());
  count++;
}

Open the Serial Monitor, copy a line of text of 128 characters, paste it into the input field, and click Send.

I'm running Arduino IDE 1.8.9 on a Mac, and the Arduino megaAVR Boards file version 1.8.3.

It works fine on a Uno WiFi Rev 2.

Why does UNO Wifi and Nano Every have a bootloader?

By looking at the boards.txt and platform.txt it's clear that the microcontroller is flashed through its UPDI line and not through the serial port. If so, why is there a bootloader there? Is it just to get the three blinks when you hit the reset button?

Uno2018 Variant pin picture is badly formatted, and doesn't match the tables.

There's an ascii picture of the ATmega4809 in variants/uno2018/pins_arduino.h that is horribly formatted with a mixture of tabs and spaces that doesn't seem to render correctly regardless of how tabs stops are defined.

The pins labeled in the picture also don't match the tables that occur later in the file, specifically WRT Arduino Pins 10 through 13 (which are on PortE in the tables, and portC in the picture. In fact, the picture has two different pins labeled "10~"

Here's a corrected picture (maybe. Depends on whether the table or picture is correct!)

// ATMEGA4809 / ARDUINO
//
//                      SCL  SDA
//                     (A5*)(A4*) (7)  (2)                 (R)  (3~) (6~)
//                 PA4  PA3  PA2  PA1  PA0  GND  VDD  UPDI PF6  PF5  PF4  PF3
//
//                  48   47   46   45   44   43   42   41   40   39   38   37
//              + ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ +
//        PA5   1|                                                             |36  PF2
//        PA6   2|                                                             |35  PF1 (TOSC2)
//        PA7   3|                                                             |34  PF0 (TOSC1)
//   (9~) PB0   4|                                                             |33  PE3 (8)
//  (10~) PB1   5|                                                             |32  PE2 (13)
//   (5~) PB2   6|                                                             |31  PE1 (12)
//        PB3   7|                          48pin QFN                          |30  PE0 (11~)
//   (Tx) PB4   8|                                                             |29  GND
//   (Rx) PB5   9|                                                             |28  AVDD
//        PC0  10|                                                             |27  PD7 (VREF)
//        PC1  11|                                                             |26  PD6
//        PC2  12|                                                             |25  PD5 (A5)
//               + ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ +
//                  13   14   15   16   17   18   19   20   21   22   23   24
//
//                  PC3  VDD  GND  PC4  PC5  PC6  PC7  PD0  PD1  PD2  PD3  PD4
//                                 (1)  (0)  (4)       (A0) (A1) (A2) (A3) (A4)

PS: "First!"

Uno Wifi Rev 2 SPI Library warning

I'm getting the following warning when verifying my code for the new Uno Wifi Rev 2:

WARNING: library SPI claims to run on (avr) architecture(s) and may be incompatible with your current board which runs on (megaavr) architecture(s).

I'm not using the SPI library, so I'm not sure where this is coming from (included in another library?). I don't see an updated SPI library for the Uno Wifi Rev 2 in the online editor. Is this something to be concerned with?

Installing Arduino megaAVR Boards breaks ATTinyCore ISP sketch uploads

Steps to reproduce:

  1. Install Arduino 1.8.9.
  2. Install ATTinyCore 1.2.5 using the Boards Manager Installation instructions on GitHub.
  3. Using the following settings on the Arduino Tools menu and an Adafruit USBtinyISP programmer, upload a sketch to an ATtiny85:
Board: ATtiny25/45/85
Chip: ATtiny85
Clock: 1MHz (internal)
B.O.D. Level: B.O.D. Disabled
Save EEPROM: EEPROM retained
Timer 1 Clock: CPU
LTO: Disabled
Programmer: USBtinyISP (ATTinyCore)
  1. Upload succeeds, see attached verbose upload output (upload-ok.txt, attached)
  2. Using the Boards Manager, install Arduino megaAVR Boards by Arduino version 1.8.3.
  3. Retry step (3) above; upload fails, see attached output (upload-err.txt, attached)
  4. Note that in upload-err.txt, avrdude runs from a different location than in upload-ok.txt. Yet the avrdude referenced in upload-err.txt can be used successfully from the command line (see cmdline.txt, attached).
  5. Remove Arduino megaAVR Boards and the ATtiny upload works again.
    upload-ok.txt
    upload-err.txt
    cmdline.txt
    Edit: This issue does not occur if a USBasp programmer is used.

Wire.endTransmission() return value doesn't match documentation

Wire.endTransmission()'s reference page says:

Returns
byte, which indicates the status of the transmission:

  • 0:success
  • 1:data too long to fit in transmit buffer
  • 2:received NACK on transmit of address
  • 3:received NACK on transmit of data
  • 4:other error

From my reading of this repository's Wire library code, it doesn't seem to comply with the documentation. Wire.endTransmission() returns the return value of TWI_MasterWrite(), which returns the return value of TWI_MasterWriteRead(), which, contrary to its documentation:

 *  \retval true  If transaction could be started.
 *  \retval false If transaction could not be started.

actually returns:

  • false: if twi_mode != TWI_MODE_MASTER
  • bytes really read: if the bytes_to_read parameter > 0
  • 0: if success (huh?)
  • 1: if failure (huh?)
  • 1: if master_trans_status != TWIM_STATUS_READY

Is NUM_TOTAL_PINS correct?

in variant/uno2018/pins_arduino.h there is:

#define NUM_DIGITAL_PINS            20
#define NUM_ANALOG_INPUTS           6
 :
#define NUM_TOTAL_PINS		(NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS + NUM_TESTPOINT_PINS + NUM_OCCUPIED_PINS)

But the DIGITAL_PINS and ANALOG_INPUTS overlap, right? Pin14 an Ain0 are the same.
(also, NUM_TOTAL_PINS turns out to be 39, but the digital_pin_to_xxx[] arrays have 41 elements.)

I think there are:

 20 normal digital and analog pins,
  2 dedicated pins for I2C
  3 dedicated pins for SPI on the ISP connector
  1 dedicated LED (hey - 6 randomish pins, just like NUM_ANALOG_INPUTS, so it comes out ALMOST right.) 
 10 pins dedicated to the on-board IO (IMU, NINA, Debug USART),
  1 pin that doesn't seem to be connected anywhere (PC3)
  4 pins with dedicated functions TOSC1/2, VREF, RESET

Which adds up to the 41 IO pins that the datasheet mentions. (add UPDI and 6 power pins to total 48 pins on the package.)

(It looks like the only place that NUM_TOTAL_PINS is used, currently, is in the digitalPintoXXX() macros, range checking. So the extent of the actual "bug" is that Pin39 (VREF) and Pin40 (RESET) will not be usable for IO. Which is not very important...)

It would be nice to pin down exactly what these numbers are supposed to mean, since they appear to be part of the standard variant definitions.

digitalPinToBitMask() is slow

Since bit shifting is expensive on AVRs, digitalPinToBitMask() should use a stored table of bitmasks (like the other AVR cores) instead of deriving the mask from a stored "bitPosition"

This speeds up a digitalWrite() pin toggle loop more than 50% for a test case where bitPosition is 5.
It'd be an even bigger difference for larger bitPositions (and has less effect for smaller bitPositions.)

It seems that the bitposition is still needed by pinMode() for manipulating PINxCTRL, but I think it's worth the extra 50bytes of flash to get the digitalWrite() speedup.

Serial interface problem with Arduino Nano Every

I have a problem with the serial interface on an Arduino Nano Every. I've found reference to this problem elsewhere and the solution is to reflash the Muxto. The issue #51 here tells you how to do that for a Mac.

Are there any instructions on how to do this on a windows computer please? I can't get the IDE to compile the muxto.ino file (I assume I need a different board installed). There is a muxto.bin file, but I don't know how to get that downloaded.

I saw that I need to boot the Arduino with two pads shorted; I've done that and it started up differently from normal, with a different com port; but the IDE shows it as "unknown board".

Baudrate correction in Serial is not correctly implemented

How much of a problem this is would depend on the correction of the individual chip.
Async is quite robust to clock accuracy, but we should still try to make the clocks as accurate
we can by using the correction methods in the right way.

The code in the pull request is now in accordance to the data sheet. The previous code would in effect either apply at least twice the compensation, or apply little or no compensation, depending on the sign of the compensation. Finally, as a matter of principle, non-corrected F_CPU is the basis, since that is what is assumed by the correction factors.

I have verified with a frequency counter that the new code gives the most accurate baudrate. On my samples the error was between 0,1% and 0,15%.

##44

To do the test, the following code will work fine since it will give a pattern on the Tx pin equivalent to a square wave of half the frequency of the baudrate:
#https://github.com/arduino/ArduinoCore-megaavr/files/3461514/Test_serial_bug.txt
Change the BAUD to test different frequencies.

Serial output is garbled if done immediately after calling Serial.begin()

Arduino Uno WiFi Rev2
Arduino megaAVR Boards 1.8.1
Arduino IDE 1.8.10 Hourly Build 2019/05/21 09:33 / Arduino IDE 1.9.0-beta build 107
Windows 10 64 bit / Ubuntu 19.04

The following code:

void setup() {
  delay(1000);  // to prove the issue is not related to printing immediately after startup
  Serial.begin(9600);
  delayMicroseconds(100);
  Serial.println("hello");  // called after a delay, so it prints fine
  Serial.println("hello");  // just to be sure everything is still printing OK
  Serial.begin(9600);
  Serial.println("hello");  // called without a delay, so it's garbled
}
void loop() {}

results in this output:

hello
hello
⸮⸮⸮⸮5

Without a delay of around 100 us between the call to Serial.begin() and Serial.println(), the output is garbled. As you can see from the output, this is not related to being soon after the program starts. It occurs even with subsequent calls to Serial.begin() (it also would have after the first call without the delay).

I've never experienced this with any other official Arduino board.

I've seen at least two threads on the Arduino Forum so far where this caused confusion.

Issue with tone() on Arduino UNO Wifi

This code wouldn't make a sound on a regular piezo, nor make a signal on the oscilloscope

void setup() {
  pinMode(6, OUTPUT);
}

void loop() {
  delay(1000);
  tone(6,600);
  delay(100);
  noTone(6);
}

While this code does work:

void setup() {
  pinMode(6, OUTPUT);
}

void loop() {
  tone(6,600);
  delay(100);
  noTone(6);
  delay(1000);
}

This code also works:

void setup() {
  pinMode(6, OUTPUT);
}

void loop() {
  delay(1000);
  tone(6,600);
  tone(6,600);
  delay(100);
  noTone(6);
}

Would there be a way to fix it in the https://github.com/arduino/ArduinoCore-megaavr/blob/master/cores/arduino/Tone.cpp file? It seems like delay(x) leaves some timer in a state that tone can't deal with. Other functions like delayMicroseconds() seem to work with tone without any problems...

I use version 1.6.24 in the board manager, tried different Arduino UNO Wifi's and selecting ATMEGA328 register emulation doesn't influence the problem.

minor issue: "TOGGLE" is not defined from the PinStatus enum values...

I see that digitalWrite() has added a "TOGGLE" option, which is currently defined in Arduino.h:
#define TOGGLE 2
However, that argument is defined as a PinStatus enum, and using toggle in a program results in a warning:

/Volumes/MacOS/HD-Users/BillW/Documents/Arduino/-test-/test_togglespeed_digitalWrite/test_togglespeed_digitalWrite.ino:46:29: warning: invalid conversion from 'int' to 'PinStatus' [-fpermissive]
     digitalWrite(PIN, TOGGLE);
                             ^

TOGGLE should be defined as a member of the enum instead:
#define TOGGLE CHANGE

(separately, I'm a little uncomfortable about the use of the PinStatus type for digitalRead and digitalWrite, but that's a separate issue.)

`digitalWrite` has a wrong signature

Currently MegaAVR is one of the very few platforms where digitalWrite doesn't take a boolean for digitalWrite (there's no digitalWrite(uint8_t pin, bool val)), this causes unnecessary incompatibility with a massive selection of libraries out there.

The function's signature should either be changed or the core should overload the function.

HardwareSerial.h is missing

Using the OSC library from CNMAT, I get an error when compiling, that HardwareSerial is missing.

Arduino: 1.8.9 (Mac OS X), Board: "Arduino Nano Every, None (ATMEGA4809)"

/Applications/Arduino.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/sstaub/Library/Arduino15/packages -hardware /Users/sstaub/Documents/Arduino/hardware -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/sstaub/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/sstaub/Documents/Arduino/libraries -fqbn=arduino:megaavr:nona4809:mode=off -vid-pid=0X2341_0X0058 -ide-version=10809 -build-path /var/folders/x6/n06cf3c50g3ctgcw5mjwcrjw0000gn/T/arduino_build_59850 -warnings=default -build-cache /var/folders/x6/n06cf3c50g3ctgcw5mjwcrjw0000gn/T/arduino_cache_949057 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.avr-gcc.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avrdude.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino16 -prefs=runtime.tools.avrdude-6.3.0-arduino16.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino16 -verbose /Users/sstaub/Documents/Arduino/lighthack_box_2b_p/lighthack_box_2b_p.ino
/Applications/Arduino.app/Contents/Java/arduino-builder -compile -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/sstaub/Library/Arduino15/packages -hardware /Users/sstaub/Documents/Arduino/hardware -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/sstaub/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/sstaub/Documents/Arduino/libraries -fqbn=arduino:megaavr:nona4809:mode=off -vid-pid=0X2341_0X0058 -ide-version=10809 -build-path /var/folders/x6/n06cf3c50g3ctgcw5mjwcrjw0000gn/T/arduino_build_59850 -warnings=default -build-cache /var/folders/x6/n06cf3c50g3ctgcw5mjwcrjw0000gn/T/arduino_cache_949057 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.avr-gcc.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avrdude.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino16 -prefs=runtime.tools.avrdude-6.3.0-arduino16.path=/Users/sstaub/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino16 -verbose /Users/sstaub/Documents/Arduino/lighthack_box_2b_p/lighthack_box_2b_p.ino
Using board 'nona4809' from platform in folder: /Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1
Using core 'arduino' from platform in folder: /Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1
Build options changed, rebuilding all
Detecting libraries used...
/Users/sstaub/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega4809 -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_NANO_EVERY -DARDUINO_ARCH_MEGAAVR -DMILLIS_USE_TIMERB3 -DNO_EXTERNAL_I2C_PULLUP -I/Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1/cores/arduino/api/deprecated -I/Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1/cores/arduino -I/Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1/variants/nona4809 /var/folders/x6/n06cf3c50g3ctgcw5mjwcrjw0000gn/T/arduino_build_59850/sketch/lighthack_box_2b_p.ino.cpp -o /dev/null
/Users/sstaub/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega4809 -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_NANO_EVERY -DARDUINO_ARCH_MEGAAVR -DMILLIS_USE_TIMERB3 -DNO_EXTERNAL_I2C_PULLUP -I/Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1/cores/arduino/api/deprecated -I/Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1/cores/arduino -I/Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1/variants/nona4809 -I/Applications/Arduino.app/Contents/Java/libraries/LiquidCrystal/src /var/folders/x6/n06cf3c50g3ctgcw5mjwcrjw0000gn/T/arduino_build_59850/sketch/lighthack_box_2b_p.ino.cpp -o /dev/null
/Users/sstaub/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega4809 -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_NANO_EVERY -DARDUINO_ARCH_MEGAAVR -DMILLIS_USE_TIMERB3 -DNO_EXTERNAL_I2C_PULLUP -I/Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1/cores/arduino/api/deprecated -I/Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1/cores/arduino -I/Users/sstaub/Library/Arduino15/packages/arduino/hardware/megaavr/1.8.1/variants/nona4809 -I/Applications/Arduino.app/Contents/Java/libraries/LiquidCrystal/src -I/Users/sstaub/Documents/Arduino/libraries/OSC /var/folders/x6/n06cf3c50g3ctgcw5mjwcrjw0000gn/T/arduino_build_59850/sketch/lighthack_box_2b_p.ino.cpp -o /dev/null
In file included from /Users/sstaub/Documents/Arduino/lighthack_box_2b_p/lighthack_box_2b_p.ino:34:0:
/Users/sstaub/Documents/Arduino/libraries/OSC/SLIPEncodedSerial.h:11:10: fatal error: HardwareSerial.h: No such file or directory
 #include <HardwareSerial.h>
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
Using library LiquidCrystal at version 1.0.7 in folder: /Applications/Arduino.app/Contents/Java/libraries/LiquidCrystal 
Using library OSC at version 1.3.5 in folder: /Users/sstaub/Documents/Arduino/libraries/OSC 
exit status 1
Error compiling for board Arduino Nano Every.

Nano Every: analogRead(...) gives only 1023

Symptoms with 2 boards:

  • analogRead(A0) or analogRead(A1) gives only 1023
  • used references: INTERNAL1V1 and INTERNAL2V5
  • Voltage at pin = 0.120V - controlled with a multimeter
    IDE 1.8.10 at Windows10 64 bit (runs well)
    Package megaavr\1.8.5

Compatibility: delay() should call yield()

In official AVR Arduino core, delay() is based on yield(), which is turn has weak binding and is overridable.
I am asking that delay() on any Arduino platform must call yield() at least once, preferably at the end of delay(), for compatibility with libraries like Scheduler and similar implementations.

TWI in slave mode using port PF2 and PF3

I need to use the ATmega4809 with I2C configured in slave mode using pins PF2 and PF3.
The only way to obtain that is to add:

PORTMUX.TWISPIROUTEA |= TWI_MUX;
TWI0.DUALCTRL = TWI_ENABLE_bm;

after the Wire.begin(4);

Probably the instruction: PORTMUX.TWISPIROUTEA |= TWI_MUX is missing inside the function TWI_SlaveInit() in file twi.c

Those who have more experience than me can check.

Livio

Using Arduino NANO Every as SLAVE in SPI communication

Hi,

i'm trying to establish an MASTER/SLAVE Communication between 2 Arduinos.

The current idea for testing is that i want the NANO to generate random numbers and send it back to the UNO.
Slave-NANO Every
Master-UNO

This is now done with a lot of register setting and bit analyzing.

I'm just wondering if this is not planned in the implementation of SPI?
Is Arduino always planned as a MASTER?
now even AttachInterrupt and DetachInterrupt are hidden in private...

using Begin / BeginTransaction & Transfer did not really help.

Have i overlooked something?

Wrong SYSCFG0 fuse byte value inside fuses_4809.bin

A bit of research lead me to this. The SYSCFG0 fuse byte is supposed to be 0xC9 (according to the datasheet), not 0xCD like the fuses_4809.bin file specifies.

I can see you've done an attempt in the boards.txt file, but this line is not picked up by avrdude.

But why bother with a binary file in the first place? Each fuse byte is accessable by passing fuse0..fuse8 to avrdude ("-Ufuse5:w:{bootloader.SYSCFG0}:m" for instance), and it makes everything more transparent to the users and developers. I actually had to find myself a binary file editor in order to track this down.

Unable to use digitalPinToInterrupt with attachInterrupt and detachInterrupt

We expect to be able to use the attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) syntax, even when the use of digitalPinToInterrupt is not absolutely necessary due to the interrupts having the same numbering as the pins (e.g. SAMD). This allows code to be written that is portable across architectures.

This is not currently possible with Arduino megaAVR Boards. Arduino megaAVR Boards' attachInterrupt was written to take a pin number as the first parameter, then convert the pin number to interrupt number inside attachInterrupt using digitalPinToInterrupt, breaking from the convention established in Arduino AVR Boards.

To make matters more confusing, the attachInterrupt documentation falsely claims:

For Uno WiFiRev.2, Due, Zero, MKR Family and 101 boards the interrupt number = pin number.

The attachInterrupt documentation also specifically says that the attachInterrupt(pin, ISR, mode) syntax is not recommended.


Originally reported at:
http://forum.arduino.cc/index.php?topic=592249

[Nano Every] Incorrect RX/TX pin placement?

I'm working on a pinout diagram for the Nano Every, since there doesn't exist one yet.
It turns out that there might be a hardware issue with the TXD1 and RXD1 pins. Why is the TX pin (digital pin 1, TXD1) placed as the first pin, and the RX pin (digital pin 0, RXD1) placed as the second pin?

Is this on purpose or just a hardware bug that's too late to fix?

Skjermbilde 2019-08-19 19 34 34

IDE "Port" is grayed

Hello,

After installing megaAVR 1.8.5 on IDE 1.8.12 in Windows 10 and
selecting Arduino Nano Every the Port menu remains grayed.

Please advise.
Thank you!

unnecessary atomicity code in digitalWrite() and etc.

The Mega-0 OUTSET and OUTCLR registers are atomic by nature, so interrupts do not need to be disabled in the digitalWrite() code that manipulates them. (code that does &= or |= still needs such wrappers, since all the IOREGes are now outside the SBI/CBI range and will result in non-atomic access.)

	/* Output direction */
	if(port->DIR & bit_mask){

//OMIT		/* Save system status and disable interrupts */
//OMIT		uint8_t status = SREG;
//OMIT		cli();

		/* Set output to value */
		if (val == LOW) { /* If LOW */
			port->OUTCLR = bit_mask;

		} else if (val == TOGGLE) { /* If TOGGLE */
			port->OUTTGL = bit_mask;
									/* If HIGH OR  > TOGGLE  */
		} else {
			port->OUTSET = bit_mask;
		}

//OMIT		/* Restore system status */
//OMIT		SREG = status;

	/* Input direction */
	} else {

Millis, micros and delay generated by timer3b

Hi!

I'm working on a 3rd part Arduino core where the goal is to add proper support for the entire megaAVR-0 series (ATmega3208/4808, ATmega3209/4809) and hopefully a handful of new tinyAVRs in the future. I'm doing this based on this repo.

However an issue is that the ATmega4809 is the only devices out there with four 16-bit timers (type B). And, timer3b is used to generate micros in this core. This means that this core will only work with ATmega4809 devices without heavy modification of the timer setup routines.

This may cause problems when it comes to code compatibility between different targets.

Why not use timer0b (TCB0) to generate millis, micros and delay? Timer0 have always beed used for this in the past, and all new AVRs (megaAVR-0, tinyAVR-0, tinyAVR-1 series) have TCB0 available. This would make porting these core files to other AVRs much simpler.

I could of course change to TCB0 in my own repo, but it would be much better if TCB0 was the default timer no matter what hardware or Arduino core is used.

Everyone will benefit from Arduino support for the new AVR lineup 🙂
New users will discover the new and impressing lineup of AVR microcontrollers, and still being able to write programs for them in an API there already familiar with. And Microchip will sell more AVRs!

GitHub Releases

It appears that GitHub releases have not been performed for the last two core releases. This would be helpful in notifying users when new releases are available and the differences between them.

Really bad code in Serial transmit interrupt driver

There is a really bad while loop in the transmit interrupt driver that causes the CPU to spend most of its time looping with interrupts disabled in the interrupt driver.

I must say I was very surprised to find this, makes one wonder what other things went passed code review and testing?

Anyway, the fix is here: #42

I have attached a simple test program that shows just how serious this is (try it with and without the patch):
Test_serial_bug.txt
Another way to test is to transmit a lot on one or more serial channels and receive at the same time. You will loose a lot of characters.

Nano Every, ATMEGA328 emulation mode not working correctly

It appears the ATMEGA328 emulation mode is not being included in the Arduino.h core file.

The Arduino.h has an entry for the UNO_WIFI_REV2_328MODE check for the include file.
#ifdef UNO_WIFI_REV2_328MODE
#include <UNO_compat.h>
#endif

But it seems to be missing a similar check for AVR_NANO_4809_328MODE.
Should have something similar like;
#ifdef AVR_NANO_4809_328MODE
#include <NANO_compat.h>
#endif

Update toolchain/Atmel packs

Atmel/Microchip has just released a new pack for ATmega devices; 1.4.346. This fixes some naming errors I've stumbled across earlier when working with the CCL peripherals. The latest release also fixes incorrect vector tables for ATmega808/809, and error I found back in october without knowing precisely what caused it.

There's a whole thread over at AVRfreaks about the vector table issue if you want to read more. I would be very grateful if you could apply this patch 🙂

pulseIn() returns incorrect values when called soon after Serial.print()

Arduino megaAVR Boards @ c8f8d76, ArduinoCore-API @ arduino/ArduinoCore-API@e1eb8de, Arduino IDE Hourly Build 2019/04/18 12:33, Windows 10 64 bit

If pulseIn() is called soon after Serial.print(), the values returned are incorrect.

When the below code is run on the Uno WiFi Rev2 with a ~1 kHz square wave input on pin 2:

const byte pulsePin = 2;
unsigned long pulseDuration;

void setup() {
  pinMode(pulsePin, INPUT);
  Serial.begin(9600);
}

void loop() {
  Serial.print("Pulse duration: ");
  Serial.println(pulseDuration);
  pulseDuration = pulseIn(pulsePin, HIGH);
  delay(1000);
}

Serial Monitor shows:

Pulse duration: 0
Pulse duration: 507
Pulse duration: 466
Pulse duration: 2
Pulse duration: 2
Pulse duration: 2
Pulse duration: 5
Pulse duration: 22
Pulse duration: 302
Pulse duration: 514
Pulse duration: 506
Pulse duration: 509
Pulse duration: 2
Pulse duration: 8
Pulse duration: 123
Pulse duration: 323
Pulse duration: 2
Pulse duration: 210

...and so on.

If I call noInterrupts() or Serial.flush() before calling pulseIn(), the values returned are as expected (~500).

I know there is a comment on the pulseIn() definition:

* This function performs better with short pulses in noInterrupt() context

So maybe this is simply a matter of me misusing pulseIn()? I thought I would bring the subject up here because I don't see these erratic return values when I run the same code on Uno, MKR1000, or Due.

If there is nothing that can be changed in the code to make pulseIn() work better in this situation, I can instead improve the pulseIn() reference page, which currently makes no mention of disabling interrupts.

Originally reported at:
https://forum.arduino.cc/index.php?topic=613933

F() Flash Macro No Longer Recognized

The F() flash macro used for storing strings in flash memory no longer appears to be working as of the 1.8.5 version. The following error is reported during compile for each use.

error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return
#define F(str) (str)

Linux ARM version of avr-gcc 5.4.0-atmel3.6.1-arduino2 doesn't support ATmega4809

Compilation for Arduino Uno WiFi Rev2 on Linux ARM system fails:

avr-g++: error: device-specs/specs-atmega4809: No such file or directory

Unlike the Windows, Linux 32/64-bit, and macOS versions of avr-gcc 5.4.0-atmel3.6.1-arduino2, the files specs-atmega4809 and iom4809.h are missing.

From examining the contents of the archive files, the same issue appears to exist for the Linux ARM64 version of avr-gcc 5.4.0-atmel3.6.1-arduino2 as well.


Originally reported at http://forum.arduino.cc/index.php?topic=594755

Problem Downloading code to Wifi Rev2

My code compiles fine but when I get to the downloading part of a new install I get the following error. At the bottom of the error list it says the board is not connected but when I get the board info the window shows the correct info.

Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Board: "Arduino Uno WiFi Rev2, None (ATMEGA4809)"

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware -hardware C:\Users\telli\Documents\ArduinoData\packages -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\tools-builder -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware\tools\avr -tools C:\Users\telli\Documents\ArduinoData\packages -built-in-libraries C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\libraries -libraries C:\Users\telli\Documents\Arduino\libraries -fqbn=arduino:megaavr:uno2018:mode=off -vid-pid=0X03EB_0X2145 -ide-version=10809 -build-path C:\Users\telli\AppData\Local\Temp\arduino_build_873433 -warnings=none -build-cache C:\Users\telli\AppData\Local\Temp\arduino_cache_444121 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2 -prefs=runtime.tools.avr-gcc-5.4.0-atmel3.6.1-arduino2.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2 -prefs=runtime.tools.arduinoOTA.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\arduinoOTA\1.2.1 -prefs=runtime.tools.arduinoOTA-1.2.1.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\arduinoOTA\1.2.1 -prefs=runtime.tools.avrdude.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avrdude\6.3.0-arduino14 -prefs=runtime.tools.avrdude-6.3.0-arduino14.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avrdude\6.3.0-arduino14 -verbose C:\Users\telli\Documents\Arduino\temp_control\temp_control.ino
C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\arduino-builder -compile -logger=machine -hardware C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware -hardware C:\Users\telli\Documents\ArduinoData\packages -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\tools-builder -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware\tools\avr -tools C:\Users\telli\Documents\ArduinoData\packages -built-in-libraries C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\libraries -libraries C:\Users\telli\Documents\Arduino\libraries -fqbn=arduino:megaavr:uno2018:mode=off -vid-pid=0X03EB_0X2145 -ide-version=10809 -build-path C:\Users\telli\AppData\Local\Temp\arduino_build_873433 -warnings=none -build-cache C:\Users\telli\AppData\Local\Temp\arduino_cache_444121 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2 -prefs=runtime.tools.avr-gcc-5.4.0-atmel3.6.1-arduino2.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2 -prefs=runtime.tools.arduinoOTA.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\arduinoOTA\1.2.1 -prefs=runtime.tools.arduinoOTA-1.2.1.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\arduinoOTA\1.2.1 -prefs=runtime.tools.avrdude.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avrdude\6.3.0-arduino14 -prefs=runtime.tools.avrdude-6.3.0-arduino14.path=C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avrdude\6.3.0-arduino14 -verbose C:\Users\telli\Documents\Arduino\temp_control\temp_control.ino
Using board 'uno2018' from platform in folder: C:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26
Using core 'arduino' from platform in folder: C:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26
Detecting libraries used...
"C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega4809 -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO_WIFI_REV2 -DARDUINO_ARCH_MEGAAVR -DMILLIS_USE_TIMERB3 "-IC:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26\cores\arduino/api/deprecated" "-IC:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26\cores\arduino" "-IC:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26\variants\uno2018" "C:\Users\telli\AppData\Local\Temp\arduino_build_873433\sketch\temp_control.ino.cpp" -o nul
Generating function prototypes...
"C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega4809 -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO_WIFI_REV2 -DARDUINO_ARCH_MEGAAVR -DMILLIS_USE_TIMERB3 "-IC:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26\cores\arduino/api/deprecated" "-IC:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26\cores\arduino" "-IC:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26\variants\uno2018" "C:\Users\telli\AppData\Local\Temp\arduino_build_873433\sketch\temp_control.ino.cpp" -o "C:\Users\telli\AppData\Local\Temp\arduino_build_873433\preproc\ctags_target_for_gcc_minus_e.cpp"
"C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\tools-builder\ctags\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\Users\telli\AppData\Local\Temp\arduino_build_873433\preproc\ctags_target_for_gcc_minus_e.cpp"
Compiling sketch...
"C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega4809 -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO_WIFI_REV2 -DARDUINO_ARCH_MEGAAVR -DMILLIS_USE_TIMERB3 "-IC:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26\cores\arduino/api/deprecated" "-IC:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26\cores\arduino" "-IC:\Users\telli\Documents\ArduinoData\packages\arduino\hardware\megaavr\1.6.26\variants\uno2018" "C:\Users\telli\AppData\Local\Temp\arduino_build_873433\sketch\temp_control.ino.cpp" -o "C:\Users\telli\AppData\Local\Temp\arduino_build_873433\sketch\temp_control.ino.cpp.o"
Compiling libraries...
Compiling core...
Using previously compiled file: C:\Users\telli\AppData\Local\Temp\arduino_build_873433\core\variant.c.o
Using precompiled core: C:\Users\telli\AppData\Local\Temp\arduino_cache_444121\core\core_arduino_megaavr_uno2018_mode_off_dcb64d4f6a6de1966fae6a8c32168afe.a
Linking everything together...
"C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2/bin/avr-gcc" -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega4809 -o "C:\Users\telli\AppData\Local\Temp\arduino_build_873433/temp_control.ino.elf" "C:\Users\telli\AppData\Local\Temp\arduino_build_873433\sketch\temp_control.ino.cpp.o" "C:\Users\telli\AppData\Local\Temp\arduino_build_873433\core\variant.c.o" "C:\Users\telli\AppData\Local\Temp\arduino_build_873433/..\arduino_cache_444121\core\core_arduino_megaavr_uno2018_mode_off_dcb64d4f6a6de1966fae6a8c32168afe.a" "-LC:\Users\telli\AppData\Local\Temp\arduino_build_873433" -lm
"C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\Users\telli\AppData\Local\Temp\arduino_build_873433/temp_control.ino.elf" "C:\Users\telli\AppData\Local\Temp\arduino_build_873433/temp_control.ino.eep"
"C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2/bin/avr-objcopy" -O ihex -R .eeprom "C:\Users\telli\AppData\Local\Temp\arduino_build_873433/temp_control.ino.elf" "C:\Users\telli\AppData\Local\Temp\arduino_build_873433/temp_control.ino.hex"
"C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avr-gcc\5.4.0-atmel3.6.1-arduino2/bin/avr-size" -A "C:\Users\telli\AppData\Local\Temp\arduino_build_873433/temp_control.ino.elf"
Sketch uses 11336 bytes (23%) of program storage space. Maximum is 49152 bytes.
Global variables use 326 bytes (5%) of dynamic memory, leaving 5818 bytes for local variables. Maximum is 6144 bytes.
C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avrdude\6.3.0-arduino14/bin/avrdude -CC:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude.conf -v -patmega4809 -cxplainedmini_updi -Pusb -b115200 -e -D -Uflash:w:C:\Users\telli\AppData\Local\Temp\arduino_build_873433/temp_control.ino.hex:i -Ufuse5:w:0xC9:m -Ufuse8:w:0x00:m

avrdude: Version 6.3-20171130
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch

     System wide configuration file is "C:\Users\telli\Documents\ArduinoData\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude.conf"

     Using Port                    : usb
     Using Programmer              : xplainedmini_updi
     Overriding Baud Rate          : 115200

avrdude: Found CMSIS-DAP compliant device, using EDBG protocol
AVR Part : ATmega4809
Chip Erase delay : 0 us
PAGEL : P00
BS2 : P00
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 0
StabDelay : 0
CmdexeDelay : 0
SyncLoops : 0
ByteDelay : 0
PollIndex : 0
PollValue : 0x00
Memory Detail :

                              Block Poll               Page                       Polled
       Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
       ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
       signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
       prodsig        0     0     0    0 no         61   61      0     0     0 0x00 0x00
       fuses          0     0     0    0 no          9    0      0     0     0 0x00 0x00
       fuse0          0     0     0    0 no          1    0      0     0     0 0x00 0x00
       fuse1          0     0     0    0 no          1    0      0     0     0 0x00 0x00
       fuse2          0     0     0    0 no          1    0      0     0     0 0x00 0x00
       fuse4          0     0     0    0 no          1    0      0     0     0 0x00 0x00
       fuse5          0     0     0    0 no          1    0      0     0     0 0x00 0x00
       fuse6          0     0     0    0 no          1    0      0     0     0 0x00 0x00
       fuse7          0     0     0    0 no          1    0      0     0     0 0x00 0x00
       fuse8          0     0     0    0 no          1    0      0     0     0 0x00 0x00
       lock           0     0     0    0 no          1    0      0     0     0 0x00 0x00
       data           0     0     0    0 no          0    0      0     0     0 0x00 0x00
       usersig        0     0     0    0 no         64   64      0     0     0 0x00 0x00
       flash          0     0     0    0 no      49152  128      0     0     0 0x00 0x00
       eeprom         0     0     0    0 no        256   64      0     0     0 0x00 0x00

     Programmer Type : JTAGICE3_UPDI
     Description     : Atmel AVR XplainedMini in UPDI mode
     ICE hardware version: 0
     ICE firmware version: 1.19 (rel. 57)
     Serial number   : B8439DC837CB552DC3A7
     Vtarget         : 5.00 V
     JTAG clock megaAVR/program: 0 kHz
     JTAG clock megaAVR/debug:   0 kHz
     JTAG clock Xmega: 0 kHz
     PDI clock Xmega : 0 kHz

avrdude: Partial Family_ID returned: "mega"
avrdude: AVR device initialized and ready to accept instructions

Reading | avrdude: bad response to enter progmode command: 0xa0
avr_read(): error reading address 0x0000
read operation failed for memory "signature"
avrdude: error reading signature data for part "ATmega4809", rc=-67
avrdude: error reading signature data, rc=-67

avrdude done. Thank you.

the selected serial port
does not exist or your board is not connected

TimeLib.h updated for use RTC circuit embedded with megaavr

Just for information,

I've updated original TimeLib.h library for use with internal RTC clock of Arduino Uno WiFi rev 2
https://github.com/goodchip/Time

Examples here: https://github.com/goodchip/Time/tree/master/examples/TimeInternalRTC

Features:

  • use internal RTC circuit for real clock in board (not based on millis() function)
  • additional attach/detach interrupt function to run user function at adjustable freq. synchronized by RTC
  • adjustable top syncho between RTC and real second when setTime is called
  • 100% compatible with 328p code (run without RTC) if interrupt are not used

Current limitation:

  • use only external quartz for the moment.
  • alpha version

Have fun!

Sylvain

Compile problems with arduino uno wifi rev2

Hello togehter,

i use an arduino uno wifi rev2 for a project and i got one error after an other.
I'm developing in the Visual Studio Code IDE with the platformIO plugin. The needed platform für my arduino can be added with the platformIO plugin, the microcontroller is found with the search term "atmega4809".
Because the arduino uno wifi has a different chip than the arduino uno, it needs a spi lib, which is tuned to the architecture of the processor. The needed lib I could copy from the Arduino IDE in my project, this fixed my first error messages and led immediately to the next, which I can not fix.
During compilation the following error messages occur:

In file included from .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:7:0: .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp: In static member function 'static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)': C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1282:29: note: in expansion of macro 'F' case STATUS_OK: return F("Success."); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1283:31: note: in expansion of macro 'F' case STATUS_ERROR: return F("Error in communication."); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1284:34: note: in expansion of macro 'F' case STATUS_COLLISION: return F("Collission detected."); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1285:32: note: in expansion of macro 'F' case STATUS_TIMEOUT: return F("Timeout in communication."); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1286:32: note: in expansion of macro 'F' case STATUS_NO_ROOM: return F("A buffer is not big enough."); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1287:38: note: in expansion of macro 'F' case STATUS_INTERNAL_ERROR: return F("Internal error in the code. Should not happen."); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1288:32: note: in expansion of macro 'F' case STATUS_INVALID: return F("Invalid argument."); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1289:34: note: in expansion of macro 'F' case STATUS_CRC_WRONG: return F("The CRC_A does not match."); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1290:35: note: in expansion of macro 'F' case STATUS_MIFARE_NACK: return F("A MIFARE PICC responded with NAK."); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1291:23: note: in expansion of macro 'F' default: return F("Unknown error"); ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp: In static member function 'static const __FlashStringHelper* MFRC522::PICC_GetTypeName(MFRC522::PICC_Type)': C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1330:39: note: in expansion of macro 'F' case PICC_TYPE_ISO_14443_4: return F("PICC compliant with ISO/IEC 14443-4"); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1331:37: note: in expansion of macro 'F' case PICC_TYPE_ISO_18092: return F("PICC compliant with ISO/IEC 18092 (NFC)"); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1332:39: note: in expansion of macro 'F' case PICC_TYPE_MIFARE_MINI: return F("MIFARE Mini, 320 bytes"); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1333:37: note: in expansion of macro 'F' case PICC_TYPE_MIFARE_1K: return F("MIFARE 1KB"); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1334:37: note: in expansion of macro 'F' case PICC_TYPE_MIFARE_4K: return F("MIFARE 4KB"); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1335:37: note: in expansion of macro 'F' case PICC_TYPE_MIFARE_UL: return F("MIFARE Ultralight or Ultralight C"); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1336:39: note: in expansion of macro 'F' case PICC_TYPE_MIFARE_PLUS: return F("MIFARE Plus"); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1337:41: note: in expansion of macro 'F' case PICC_TYPE_MIFARE_DESFIRE: return F("MIFARE DESFire"); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1338:36: note: in expansion of macro 'F' case PICC_TYPE_TNP3XXX: return F("MIFARE TNP3XXX"); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1339:39: note: in expansion of macro 'F' case PICC_TYPE_NOT_COMPLETE: return F("SAK indicates UID is not complete."); ^ C:\Users\phili\.platformio\packages\framework-arduino-megaavr\cores\arduino/Arduino.h:30:20: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str) ^ .pio\libdeps\uno_wifi_rev2\MFRC522_ID63\src\MFRC522.cpp:1341:24: note: in expansion of macro 'F' default: return F("Unknown type"); ^ *** [.pio\build\uno_wifi_rev2\libeb4\MFRC522_ID63\MFRC522.cpp.o] Error 1

The code which is compiled is very simple and I do not think this is a mistake:

`#include <Arduino.h>
#include <SPI.h>
#include <MFRC522.h>

void setup() {
Serial.begin(9600);
SPI.begin();
Serial.println("Hello");
// put your setup code here, to run once:
}

void loop()
{
// put your main code here, to run repeatedly:
}`

I hope someone can help me with the problem, otherwise I have to switch to the Arduino IDE, which would be very unfavorable in the complexity of my project.

arvdude: Warning: invalid value for unused bits in fuse "fuse5"....

I'm receiving this warning whenever I try to load a sketch to my Uno wifi rev2 board. I read an earlier post regarding this problem where someone said "it's just a warning, go ahead and enjoy using the Uno...." NO, the board does not work, I've tried loading several different sketches and it does not work! I've updated to the latest firmware version and that's when this error started, I cannot seem to get rid of the "Warning" and I definitely cannot use my Uno WiFi Rem2 board.

attachInterrupt is pretty memory hungry

attachInterrupt is pretty memory hungry for what it is. voidFuncPtr alone occupies 96 bytes of RAM, and it doesn't matter if you use 1 or 41 interrupt pins. I guess this is acceptable for a 48kB device but bear in mind that this core is the base for other mega/tinyAVR targets too. Targets with much less flash and RAM. I'm not quite sure how, but a way of handling function pointers in an array isn't as elegant on a device where all pins can be used as interrupts, compared to e.g the Arduino UNO where only two pins can be used (four bytes occupied by voidFuncPtr).

IMO the ISR itself is also quite bloated. I will try to experiment a little, but as a start; can't we just pass a PORT_t pointer to port_interrupt_handler instead of having to deal with the portToPortStruct array? Should be more efficient. Something like this code; tested with a pushbutton to pin PF6 on my Curiosity Nano. Any thoughts on this @facchinm?

I commented out the check if the function pointer is 0. Not sure why this was added. If you look at how the ISR is handled by the "classic" Arduino AVRs it's completely barebone without any "protection" inside the ISR. This should be the ideal goal. As little code as possible in the ISR.

static void port_interrupt_handler(PORT_t* PORT, uint8_t port_num) {

  /* Copy flags */
  uint8_t int_flags = PORT->INTFLAGS;

  uint8_t bit_pos = PIN0_bp;
  uint8_t bit_mask = PIN0_bm;

  /* Iterate through flags */
  while(bit_pos <= PIN7_bp){

    /* Check if flag raised */
    if(int_flags & bit_mask){

    /* Get interrupt */
    uint8_t interrupt_num = port_num * 8 + bit_pos;

      /* Check if function defined */
      //if(intFunc[interrupt_num] != 0){ // This _is_ an ISR. Keep it as short as possible!

        /* Call function */
        intFunc[interrupt_num]();
      //}
    }
    bit_pos++;
    bit_mask = (bit_mask << 1); 
  }

  /* Clear flags that have been handled */
  PORT->INTFLAGS = int_flags;
}

#define IMPLEMENT_ISR(vect, port, port_num) \
ISR(vect) { \
  port_interrupt_handler(port, port_num);\
} \

IMPLEMENT_ISR(PORTA_PORT_vect, &PORTA, PA)
IMPLEMENT_ISR(PORTB_PORT_vect, &PORTB, PB)
IMPLEMENT_ISR(PORTC_PORT_vect, &PORTC, PC)
IMPLEMENT_ISR(PORTD_PORT_vect, &PORTD, PD)
IMPLEMENT_ISR(PORTE_PORT_vect, &PORTE, PE)
IMPLEMENT_ISR(PORTF_PORT_vect, &PORTF, PF)

Eliminate pgmspace?

This is just an idea, at the moment - I may get some statistics to support it (or not), soon.

The 0-seriese "megaavr" chips have a unified address space where flash is accessible the same as RAM, and so LPM instructions are no longer needed to access constant tables stored in flash. An LDx from flash isn't actually any faster than an LPM, but there are a lot of extra addressing modes available
(indexing using X, Y, and Z, rather than only Z, for example), so I'd expect some overall improvement in behavior once the compiler gets it's register allocation optimization fingers in there.

That means that the various tables (notably the digital_pin_to* tables) can be allocated without specifying PROGMEM, and we don't need "pgm_read_*" functions to access them.

See also https://www.avrfreaks.net/comment/2593311#comment-2593311

(Hmm. FlashStringHelper could go away too. I guess Serial.print("string") is already automatically using this feature. (confirmed, BTW!))

(Probably the best way to do this is to redefine the existing stuff as null macros, rather than eliminating it. #define F(x) (x), for example`)
http://forum.arduino.cc/index.php?topic=581415.msg3957672#msg3957672

Baudrate out of range is silently accepted

While the original Uno is advertised to support Serial baudrates down to 300, it seems the m4809 can only support baudrates down to 2400. This is due to the design of the baudrate generator, where lower baudrates overflows the 16 bit divider. I have not checked if there are some tricks to circumvent this, other than reducing the CPU clock.

Anyway, with rates lower than 2400 the current code just silently truncates the divisor to 16 bits, causing all sorts of crazy baudrates. Which is really not nice at all, especially for a platform that is beginner friendly.

Other than updating the documentation, what would the right way of handling this be? I noticed in earlier versions of the code there was an internal error flag that simply skipped the entire UART initialization if the baudrate was too high, but that was probably not useful. One option would be to let begin return true/false to indicate problems?

There is also a max baudrate of 1843200 which I guess is less of a practical problem.

Warning when second argument in digitalWrite is not PinStatus

It seems like the second argument of digitalWrite is expecting a constant from PinStatus. However this isn't always ideal, and we get an ugly warning like shown below when this is not the case.

/var/folders/6l/ypg6qbw172v1s4vtt6g990tw0000gn/T/arduino_modified_sketch_206750/BlinkWithoutDelay.ino: In function 'void loop()':
/var/folders/6l/ypg6qbw172v1s4vtt6g990tw0000gn/T/arduino_modified_sketch_206750/BlinkWithoutDelay.ino:69:34: warning: invalid conversion from 'int' to 'PinStatus' [-fpermissive]
     digitalWrite(ledPin, ledState);
                                  ^
In file included from /Users/hans/Documents/Arduino/hardware/MegaCoreX/avr/cores/coreX-corefiles/api/ArduinoAPI.h:52:0,
                 from /Users/hans/Documents/Arduino/hardware/MegaCoreX/avr/cores/coreX-corefiles/Arduino.h:23,
                 from /var/folders/6l/ypg6qbw172v1s4vtt6g990tw0000gn/T/arduino_build_868899/sketch/BlinkWithoutDelay.ino.cpp:1:
/Users/hans/Documents/Arduino/hardware/MegaCoreX/avr/cores/coreX-corefiles/api/Common.h:104:6: note:   initializing argument 2 of 'void digitalWrite(pin_size_t, PinStatus)'
 void digitalWrite(pin_size_t pinNumber, PinStatus status);
      ^
// Blink without Delay

// constants won't change. Used here to set a pin number:
const int ledPin =  LED_BUILTIN;// the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

Arduino Wifi Rev2, mqtt, wifi + servo not compatible?

Hi,
I have no idea if this is the right place to post this issue. If wrong, just delete it, my apologies.

I have posted it on arduino.cc and haven't got one single suggestion or answer at all. I don't want to post the same info in two places so I basically will just post the link.

But here comes a short description:
The issue is that I cannot get Arduino Wifi Rev2 to work with mqtt, wifi and servo at the same time. mqtt and wifi works fine, servo works fine but as soon as I add those together everything gets very unstable. No matter what pin I use for the servo (which was my original problem but then I found out which one to use (8)). And it is also very unstable without the servo even connected, that is when I realized I might have a real problem somewhere.

I have tried to boil the problem down to a simple one and now I am down to one simple sketch (an example sketch) with two extra lines of code. As soon as I add the servo everything becomes unstable. And I have no idea why.

Here is the link to what I think is a clear definition of the problem. Would very much appreciate any form of tips or suggestion on how to go on because I am very close to give up totally after a long time of trying to find out what is wrong. Maybe I have totally missed something.

https://forum.arduino.cc/index.php?topic=610037.0

I2C fail and crashe ATMEGA4809 when i2cdetect linux command is launched

I've a Raspberry 3 board in I2C master configuration, wired at 3 arduino boards :

  • 2 arduino pro mini (as control sample device) at 0x03 and 0x04 slave i2c address
  • 1 arduino Uno WiFi rev 2 (as 4809 test device) at 0x11 slave i2c address

NB: the crypto chip on the Uno WiFi Rev 2 has been desolded to remove any potential influence and does not appear in the addresses

The 3 boards have the same demo i2c sketch in his EEPROM :

#include <Wire.h>

void setup() {
  Wire.begin(0x~thisSlaveAddr~);
  Wire.onRequest(reqIRQ);
}

void loop() {
  delay(1000);
}

void reqIRQ() {
  Wire.write(0x01);
}

IMPORTANT : I use the Wire.h library I submitted in pull request to make the sketch working : #22

I use the following command on Pi3 to list the slaves presents on the bus:

i2cdetect -y 0

When I launch this command for the 1st time, it's happening: (normal condition)

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          03 04 -- -- -- -- -- -- -- -- -- -- -- 
10: -- 11 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

But, at the 2nd launch, the 4809 chip disappear:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          03 04 -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

And, at the 3th launch, the i2c BUS freeze totally for undetermined time:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

A simple reset of the Uno WiFi rev 2 board, restore the freeze.

Interestingly, the following command does NOT cause the problem:

i2cdetect -r -y 0

The problem only concerns the i2cdetect command, the other master / slave communications seem to work properly.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.